我正在尝试将OmniAuth-Twitter安装在我的Devise之上。我正在关注本教程https://www.youtube.com/watch?v=X6tKAUOMzCs&t=42s但我遇到了一个我无法在线找到的错误。实际上这不是错误,在我从 Twitter 授权应用程序后,它会重定向到我的登录表单!
全域认证.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, "ididputmykeyhere", "ididputmykeyhere"
end
路线.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
设计.rb
config.omniauth :twitter, ENV["ididputmykeyhere"], ENV["ididputmykeyhere"]
用户.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:twitter]
has_many :posts
end
我放置了 user_twitter_omniauth_authorize_path链接到我的视图。
- 它重定向到 Twitter 授权页面 ✅</li>
- 我从 Twitter 授权应用程序✅</li>
- 我希望它会引发request.env["omniauth.auth"]但它会重定向到localhost:3000/users/sign_in我在此处看到登录表单❌</li>
它就像跳过我的omniauth_callbacks_controller,我将在其中写入保存到数据库代码,我错过了什么?谢谢吨!
++++++++++++++++++++++++更新++++++++++++++++++++++++
我刚刚在omniauth_callbakcs_controller.rb 中添加了def failure,我看到该应用程序正在为此而努力。
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