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

时间:2011-04-24 22:08:40

标签: ruby-on-rails oauth devise omniauth

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

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

但我该怎么做?

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

3 个答案:

答案 0 :(得分:18)

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

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

link_to "Log In", "/auth/linkedin?foo=bar"

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

request.env['omniauth.params'] == { "foo" => "bar" }

答案有点晚了,但我希望它有所帮助。

答案 1 :(得分:3)

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

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

session[:additional] = additional_data_hash

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

data = session.delete(:additional)

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

答案 2 :(得分:-1)

请注意,如果您使用的是ng-token-auth,则可以将参数传递给$auth.authenticate,这些参数将在创建用户模型时使用。 例如:

$auth.authenticate('github', {params: {favorite_color: 'green'})