3

我正在使用 devise / omniauth 针对 Facebook 验证我的 Rails 应用程序。我正在尝试将其更改为callback_path自定义的,但无论我将其设置为什么,omniauth.auth请求变量都会返回为零。例如,在这里我将 设置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 代码,看看可能出了什么问题,但我不太清楚出了什么问题。

我的问题:

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

1 回答 1

2

state参数不应该用于传递数据(实际上,请考虑一下,您正在信任第三方的数据!)。该参数仅用于缓解 CSRF 攻击。

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

link_to user_omniauth_authorize_path(:facebook, :some_key => 'some_data')

Omniauth 会自动将该数据添加到会话中,并在回调中从会话中删除该数据,让您可以像这样访问它:

request.env['omniauth.params']['some_key']
于 2013-02-05T20:00:18.047 回答