如何通过OAuth身份验证传递参数,以便我的回调或控制器可以使用?

Tim*_* T. 9 ruby-on-rails oauth devise omniauth

我正在将OAuth用于提供商(LinkedIn).

我希望能够传递参数,以便当有人注册时,我可以在创建新用户时添加一些额外的值(我正在使用Devise).

但是我该怎么做?

看起来链接转到提供程序,然后提供程序回调我的应用程序.如何从该链接传递参数?

Mat*_*hew 18

如果您将GET样式参数添加到身份验证URL,则它们将通过密钥request.env下的Rails 对象在回调中可用omniauth.params.例如

如果您通过以下身份验证:

link_to "Log In", "/auth/linkedin?foo=bar"
Run Code Online (Sandbox Code Playgroud)

在映射到GET /auth/:provider/callback您的控制器方法中将具有:

request.env['omniauth.params'] == { "foo" => "bar" }
Run Code Online (Sandbox Code Playgroud)

答案有点晚了,但我希望它对某人有所帮助.


Jon*_*ian 3

执行此操作的简单方法是在会话中设置参数,然后在回调中访问它们。

在重定向到提供商的操作中:

session[:additional] = additional_data_hash
Run Code Online (Sandbox Code Playgroud)

在处理来自提供者的回调的操作中:

data = session.delete(:additional)
Run Code Online (Sandbox Code Playgroud)

用于delete确保您的会话对于后续请求而言保持较小。