【发布时间】:2011-08-12 00:39:09
【问题描述】:
我正在对提供商 (LinkedIn) 使用 OAuth。
我希望能够传递参数,以便在有人注册时,我可以在创建新用户时添加一些附加值(我正在使用 Devise)。
但是我该怎么做呢?
看起来链接会转到提供程序,然后它会回调我的应用程序。如何从该链接传递参数?
【问题讨论】:
标签: ruby-on-rails oauth devise omniauth
我正在对提供商 (LinkedIn) 使用 OAuth。
我希望能够传递参数,以便在有人注册时,我可以在创建新用户时添加一些附加值(我正在使用 Devise)。
但是我该怎么做呢?
看起来链接会转到提供程序,然后它会回调我的应用程序。如何从该链接传递参数?
【问题讨论】:
标签: ruby-on-rails oauth devise omniauth
如果您将 GET 样式参数添加到身份验证 URL,它们将通过 Rails 的 request.env 对象在 omniauth.params 键下的回调中可用。例如
如果您通过以下方式进行身份验证:
link_to "Log In", "/auth/linkedin?foo=bar"
在映射到GET /auth/:provider/callback 的控制器方法中,您将拥有:
request.env['omniauth.params'] == { "foo" => "bar" }
回答有点晚了,希望对大家有所帮助。
【讨论】:
简单的方法是在会话中设置参数,然后在回调中访问它们。
在您重定向到提供者的操作中:
session[:additional] = additional_data_hash
在处理来自提供者的回调的动作中:
data = session.delete(:additional)
使用delete 确保您的会话对于后续请求保持较小。
【讨论】:
请注意,如果您使用的是 ng-token-auth,那么您可以将参数传递给$auth.authenticate,这些将在创建用户模型时使用。 例如:
$auth.authenticate('github', {params: {favorite_color: 'green'})
【讨论】: