Rails 5 Devise 和 OmniAuth Twitter 设置在授权应用程序后重定向到 sign_in 表单
Rails 5 Devise and OmniAuth Twitter setup redirects to sign_in form after authorising app
我正在尝试在我的 Devise 上安装 OmniAuth-Twitter。我正在学习本教程 https://www.youtube.com/watch?v=X6tKAUOMzCs&t=42s,但我收到一个错误,我无法在网上找到任何地方。实际上这不是错误,在我从 Twitter 授权应用程序后,它重定向到我的 sign_in 表单!
omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, "ididputmykeyhere", "ididputmykeyhere"
end
routes.rb
Rails.application.routes.draw do
devise_for :users, :controllers => { :omniauth_callbacks => "omniauth_callbacks" }
resources :posts
resources :categories
root 'posts#index'
end
omniauth_callbakcs_controller.rb
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def twitter
# Show me what I get from Twitter
raise request.env["omniauth.auth"].to_yaml
@user = User.from_omniauth(request.env["omniauth.auth"])
sign_in_and_redirect @user
end
end
devise.rb
config.omniauth :twitter, ENV["ididputmykeyhere"], ENV["ididputmykeyhere"]
user.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:twitter]
has_many :posts
end
我把user_twitter_omniauth_authorize_pathlink放到了我的视图中。
- 它重定向到 Twitter 授权页面 ✅
- 我从 Twitter 授权应用程序 ✅
- 我期待它提高 request.env["omniauth.auth"] 但它重定向到 localhost:3000/users/sign_in 我看到登录表格的地方 ❌
它就像跳过我的 omniauth_callbacks_controller 我将写入保存到数据库代码的地方,我错过了什么?谢谢大家!
++++++++++++++++++++++更新++++++++++++++++ +++++
我刚刚将 def failure 添加到我的 omniauth_callbakcs_controller.rb 中,我看到该应用程序正在为此而努力。
def failure
raise request.env["omniauth.auth"].to_yaml
flash[:error] = 'There was a problem signing you in. Please register or try signing in later.'
redirect_to root_path
end
因此,出于某种原因,该应用程序正在跳过我的 def Twitter
这太奇怪了,但是删除 omniauth.rb 文件解决了这个问题。我在 omniauth.rb 和 devise.rb 文件中定义了 API 键。也许在多个文件中定义会导致某种冲突。
我正在尝试在我的 Devise 上安装 OmniAuth-Twitter。我正在学习本教程 https://www.youtube.com/watch?v=X6tKAUOMzCs&t=42s,但我收到一个错误,我无法在网上找到任何地方。实际上这不是错误,在我从 Twitter 授权应用程序后,它重定向到我的 sign_in 表单!
omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, "ididputmykeyhere", "ididputmykeyhere"
end
routes.rb
Rails.application.routes.draw do
devise_for :users, :controllers => { :omniauth_callbacks => "omniauth_callbacks" }
resources :posts
resources :categories
root 'posts#index'
end
omniauth_callbakcs_controller.rb
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def twitter
# Show me what I get from Twitter
raise request.env["omniauth.auth"].to_yaml
@user = User.from_omniauth(request.env["omniauth.auth"])
sign_in_and_redirect @user
end
end
devise.rb
config.omniauth :twitter, ENV["ididputmykeyhere"], ENV["ididputmykeyhere"]
user.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:twitter]
has_many :posts
end
我把user_twitter_omniauth_authorize_pathlink放到了我的视图中。
- 它重定向到 Twitter 授权页面 ✅
- 我从 Twitter 授权应用程序 ✅
- 我期待它提高 request.env["omniauth.auth"] 但它重定向到 localhost:3000/users/sign_in 我看到登录表格的地方 ❌
它就像跳过我的 omniauth_callbacks_controller 我将写入保存到数据库代码的地方,我错过了什么?谢谢大家!
++++++++++++++++++++++更新++++++++++++++++ +++++
我刚刚将 def failure 添加到我的 omniauth_callbakcs_controller.rb 中,我看到该应用程序正在为此而努力。
def failure
raise request.env["omniauth.auth"].to_yaml
flash[:error] = 'There was a problem signing you in. Please register or try signing in later.'
redirect_to root_path
end
这太奇怪了,但是删除 omniauth.rb 文件解决了这个问题。我在 omniauth.rb 和 devise.rb 文件中定义了 API 键。也许在多个文件中定义会导致某种冲突。