我正在通过现有的facebook
帐户登录网站。所以我注册了一个facebook应用程序并在development.rb
和production.rb
文件中存储了 api 和 secret 。然后我使用omniauth-facebook gem
+ devise gem
来实现此功能。它完美无缺。
顺便说一句,用户可以通过内部认证(通过设计)或通过usig facebook帐户登录。
但是有一个奇怪的问题。如果我登录到facebook帐户,我注册了一个应用程序,它完美仅。
所以我注册了另一个没有在我的Rails应用程序中使用的应用程序的facebook帐户并尝试登录。它导致错误“发生了错误。请稍后再试。” ... “无法通过Facebook帐户验证您,因为”Csrf检测到“”
我尝试使用1.4.0 omniauth-facebook gem而不是1.4.1但它也导致错误“must pass either a
代码parameter or a signed request (via
signed_request parameter or a
fbsr_XXX cookie)
“
宝石
oauth2 (0.8.0)
omniauth (1.1.0)
omniauth-oauth2 (1.1.0)
omniauth-facebook (1.4.1)
warden (1.2.1)
devise (2.1.2)
你的想法?
答案 0 :(得分:8)
我也有这个问题,结果我仍然在我的Facebook应用程序中启用了“沙盒”模式。听起来这也可能是你的问题:)
如果没有,请您发布任何相关的日志条目吗?
答案 1 :(得分:2)
对我来说,我需要将provider_ignores_state: true
添加到我的Omniauth配置中:
config.omniauth :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'], {
strategy_class: OmniAuth::Strategies::Facebook,
provider_ignores_state: true
}
这是omniauth-facebook
gem版本1.6.0。
答案 2 :(得分:0)
当我删除' omniauth.rb'我解决了这个问题。因为我在devise.rb中已经有了这个配置:
config.omniauth :facebook, ENV["FB_ID"], ENV["FB_SECRET"],
scope: 'email',
info_fields: 'email, first_name, last_name',
image_size: 'large', # 50x50, guaranteed ratio
secure_image_url: true
请记住重新启动服务器以进行测试。