我在 Rails 应用中使用 Facebook Oauth 和 Devise。我成功进入了 facebook 登录页面,但随后在回调操作中出现错误。追踪到 request.env["omniauth.auth"]
返回 nil
在我的回调操作中。
gem 文件:
gem 'devise'
gem 'omniauth'
gem 'omniauth-facebook'
路线:
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" }
初始值设定项/devise.rb:
config.omniauth :facebook, Figaro.env.facebook_key, Figaro.env.facebook_secret,
scope: 'email,public_profile',
callback_url: Figaro.env.facebook_callback_url
用户.rb:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :confirmable, :validatable,
:omniauthable, :omniauth_providers => [:facebook]
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
知道为什么我的
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
然后重新启动您的服务器,然后尝试通过 facebook 登录。
你会得到你想要的:)
谢谢,享受编码 :)
关于ruby-on-rails - Rails、Devise 和 Facebook Oauth : request. env ["omniauth.auth"] 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840824/