omniauth-facebook gem:request.env [“omniauth.auth”]为零
问题描述:
我正在使用omniauth-facebook gem和devise。它一直在努力,直到最近。我最近也从Rails 4升级到了Rails 5.0.1,但我不确定这是什么原因。omniauth-facebook gem:request.env [“omniauth.auth”]为零
我目前有0个用户,我已登录Facebook。但是当我尝试在本地主机上使用Facebook注册我的应用程序时,出现此错误:
NoMethodError in RegistrationsController#facebook
undefined method `provider' for nil:NilClass
这是我的用户模型。我标记了错误突出显示的行。
User.rb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable,
:omniauthable, :omniauth_providers => [:facebook]
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user| #ERROR
@data = auth.info
user.name = @data.name
# ...
end
end
RegistrationsController
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
而且,这里是我的链接:
<%= link_to "fb", user_facebook_omniauth_callback_path(:facebook, thing: @thing.id, degree: @degree, :format => :js) %>
HTML输出:
<a href=\"/auth/facebook/callback.js?thing=2\">fb<\/a>
和路径:
localhost:3000/auth/facebook/callback.js?thing=2
所以问题是,request.env["omniauth.auth"]
是出于某种原因为零。在任何文档中找不到类似错误的任何痕迹。
以前有没有人遇到过这个或有什么想法?
答
要通过Facebook所有你需要的验证是把一个链接,从您的网站的Facebook像这样:
www.yoursite.com/auth/facebook
,然后建立了一个路线从Facebook收到回调与认证哈希:
#routes.rb
get 'auth/facebook/callback' => 'sessions#create_facebook'
您可以指定这条线的输出如何看起来像为什么你逝去的其他信息:?
<%= link_to "fb", user_facebook_omniauth_callback_path(:facebook, thing: @thing.id, degree: @degree, :format => :js) %>
编辑
认证/ Facebook的/回调是一个GET请求。 Facebook在那里向您发送用户身份验证哈希。只有Facebook本身应该使用该路线。当你想验证您的链接必须是:
localhost:3000/auth/facebook
他们的方式你拥有它,omniauth期待Facebook的身份验证哈希,但收到这会导致失败的认证“的事情= 2?”。 Omniauth试图从“?中提取信息?这是不是一个哈希,当您尝试访问AUTH [商]的事情= 2" ,权威性是空的,所以供应商没有定义任何导致:
undefined method `provider' for nil:NilClass
答
我有同样的问题和解决它从用户模型
去除
:omniauthable
我说我再培训局链接的HTML输出和路径。其他参数都只是附加的数据添加到注册路径。是否对omniauth Facebook的解决方案运行? –你有一个错误的链接。 auth/facebook/callback是为Facebook保留的,Facebook发布给你的路由你不会将信息传递给那个路由,我更新了我的答案 –
所以当creatin可以传递额外的参数g与Facebook的新用户? –