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

AnA*_*ice 35 ruby-on-rails ruby-on-rails-3

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

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

/users/auth/facebook?connect_action=signup_connect_to_facebook
Run Code Online (Sandbox Code Playgroud)

但是当connect_action param访问AuthenticationsController #Create时,它没有成功

想法?Thansk

fuz*_*lej 97

你必须使用这些:params选项,如

omniauth_authorize_path(:user, :facebook, var: 'value', var2: 'value2' )
Run Code Online (Sandbox Code Playgroud)

然后在回调中你可以访问request.env['omniauth.params']以获取哈希值!:)

  • 完全救了我的屁股.谢谢你,先生. (8认同)
  • 你救了我的一天.非常感谢. (3认同)
  • 理想情况下这可行,但代码中存在错误!https://github.com/intridea/omniauth/issues/543所以,我刚刚将值分配给了我的会话,并在回调时将其清除:) (2认同)

e3m*_*eus 7

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

是一个更详细的解释

至于传递自定义参数,我试图这样做不成功.解决方法是将其存储在会议前都要提供者解释这里.

希望这对你有所帮助.