【发布时间】:2017-04-14 04:18:06
【问题描述】:
我将omniauth-facebook gem 与devise 一起使用。它一直工作到最近。我最近还从 Rails 4 升级到 Rails 5.0.1,但我不确定是不是这个原因。
我目前有 0 个用户,并且我已登录 Facebook。但是当我尝试在本地主机上使用 Facebook 注册我的应用时,我收到了这个错误:
NoMethodError in RegistrationsController#facebook
undefined method `provider' for nil:NilClass
这是我的用户模型。我标记了错误突出显示的行。
用户.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"] 出于某种原因为零。我在任何文档中都找不到任何类似错误的痕迹。
有人遇到过这种情况或有什么想法吗?
【问题讨论】:
标签: ruby-on-rails facebook devise omniauth omniauth-facebook