Facebook身份验证无法使用自定义回调路径

时间:2013-02-05 17:15:35

标签: ruby-on-rails devise omniauth

我正在使用devise / omniauth来验证我的Rails应用程序对Facebook。我正在尝试将callback_path更改为自定义内容,但无论我将其设置为什么,omniauth.auth请求变量都会返回为nil。例如,在这里我将callback_path设置为如果我没有设置它的确切值:

Devise.setup do |config |    
  require "omniauth-facebook"
  config.omniauth :facebook, 
    ENV['FACEBOOK_APP_ID'], 
    ENV['FACEBOOK_APP_SECRET'], 
    scope: "email",
    :setup => lambda { |env| 
       env['omniauth.strategy'].options[:callback_path] = "user/auth/facebook/callback"
    }
end

如果我没有设置:callback_path,那么身份验证就可以工作,我会在omniauth.auth请求变量中获取数据。但是,我必须覆盖它,因为我需要支持在回调上传回一个属性。

我查看了Omniauth::Strategy code以查看可能出现的问题,但我无法弄清楚出了什么问题。

我的问题:

  • 为什么这不起作用?
  • 有没有更好的方法来解决问题?

1 个答案:

答案 0 :(得分:2)

state param不应该被用来传递数据(事实上,只要想一想,你就相信第三方拥有你的数据!)。该参数仅用于缓解CSRF攻击。

所以你应该做的是将你喜欢的任何参数传递给链接,如下所示:

link_to user_omniauth_authorize_path(:facebook, :some_key => 'some_data')
Omniauth将会automatically add that data to the session并在回调中remove that data from the session,让您像这样访问它:

request.env['omniauth.params']['some_key']