Devise + Omniauth - 如何传递额外的参数?

时间:2011-07-11 23:05:06

标签: ruby-on-rails ruby-on-rails-3

我有能力在应用程序加载/ users / auth / facebook连接到Facebook。我希望能够知道请求的来源。无论是来自正在注册Facebook的用户,还是仅仅想要与Facebook连接的现有用户。根据类型,反应非常不同。

如何在进行身份验证时将参数传递给omniauth。我试过了:

/users/auth/facebook?connect_action=signup_connect_to_facebook

但是当connect_action param命中AuthenticationsController #Crein

时,它没有成功

想法? Thansk

3 个答案:

答案 0 :(得分:96)

您必须使用:params选项,如

omniauth_authorize_path(:user, :facebook, var: 'value', var2: 'value2' )

以及稍后在回调中,您可以访问request.env['omniauth.params']来获取哈希值! :)

答案 1 :(得分:7)

如果请求来自应用程序中的不同页面,则可以检查request.env ['omniauth.origin']。 Omniauth会自动保存此变量。

Here是一个更详细的解释

就传递自定义参数而言,我试图这样做不成功。解决方法是在前往提供程序之前将其存储在会话中,如here所述。

希望这会对你有所帮助。

答案 2 :(得分:0)

对于Facebook使用'state'参数并传递你想要的内容,但不要忘记编码。

/users/auth/facebook?state=parameter

您可以将参数作为url格式编码json发送,然后在回调中解析它。