【问题标题】:How can I pass parameters through an OAuth authentication so that my callback or controller can use?如何通过 OAuth 身份验证传递参数,以便我的回调或控制器可以使用?
【发布时间】:2011-08-12 00:39:09
【问题描述】:

我正在对提供商 (LinkedIn) 使用 OAuth。

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

但是我该怎么做呢?

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

【问题讨论】:

    标签: ruby-on-rails oauth devise omniauth


    【解决方案1】:

    如果您将 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" }
    

    回答有点晚了,希望对大家有所帮助。

    【讨论】:

    • 问题是 bar 每次都是新的,foo 会一样,这怎么可能?我希望酒吧是动态的
    • 我试图将它用于 NetDocuments 身份验证,但它导致了 invalid_grant 响应。
    【解决方案2】:

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

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

    session[:additional] = additional_data_hash
    

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

    data = session.delete(:additional)
    

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

    【讨论】:

    • 我认为进行重定向的动作是在设计中......那我该如何处理呢?
    • 好的,所以我想我将它添加为一个会话,让它去回调并使用它....
    • 如果有人能正确回答这个问题,我会非常喜欢。 Session 是对解决的实际问题的破解。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      相关资源
      最近更新 更多