我正在使用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以查看可能出现的问题,但我无法弄清楚出了什么问题。
我的问题:
答案 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']