Jac*_*ham 8 ruby-on-rails devise oauth-2.0
我在我的rails应用程序中使用Facebook Oauth和Devise.我成功地进入了facebook登录页面,但随后在回调操作中出错.跟踪它以request.env["omniauth.auth"]返回nil我的回调动作.
的Gemfile:
gem 'devise'
gem 'omniauth'
gem 'omniauth-facebook'
Run Code Online (Sandbox Code Playgroud)
路线:
devise_scope :user do
get '/users/auth/facebook/callback', to: 'users/omniauth_callbacks#facebook'
end
resources :users
devise_for :users, path: '', path_names: { sign_up: 'register', sign_in: 'login', sign_out: 'logout'}, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
Run Code Online (Sandbox Code Playgroud)
初始化/ devise.rb:
config.omniauth :facebook, Figaro.env.facebook_key, Figaro.env.facebook_secret,
scope: 'email,public_profile',
callback_url: Figaro.env.facebook_callback_url
Run Code Online (Sandbox Code Playgroud)
User.rb:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :confirmable, :validatable,
:omniauthable, :omniauth_providers => [:facebook]
Run Code Online (Sandbox Code Playgroud)
omniauth_callbacks_controller.rb:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])
request.env["omniauth.auth"] ## <<=== this is nil
Run Code Online (Sandbox Code Playgroud)
知道我request.env["omniauth.auth"]回来的原因nil吗?
所以终于我找到了问题所在,我也为同样的问题苦苦挣扎了很长一段时间,但现在我们有了解决方案,好吧,我们开始吧:
问题出在 devise.rb 上,只需从文件中删除它即可:
config.omniauth :facebook, Figaro.env.facebook_key, Figaro.env.facebook_secret,
scope: 'email,public_profile',
callback_url: Figaro.env.facebook_callback_url
Run Code Online (Sandbox Code Playgroud)
然后重新启动服务器,然后尝试通过 facebook 登录。
你会得到你想要的:)
谢谢,享受编码:)