【问题标题】:How to refresh google authentication credentials in Ruby如何在 Ruby 中刷新 google 身份验证凭据
【发布时间】:2017-09-24 15:53:19
【问题描述】:

我能够完成身份验证流程以获取用户的凭据 - 但是,我想确保我可以继续使用这些凭据而不会过期。我完全了解token expiration 的规则。

但是,如果我想定期“刷新”我拥有的用户凭据,那么我可以确保我可以永久使用它们。我该怎么做呢?

我看到 Google 的 documentation 说,“客户端对象将根据需要刷新访问令牌”....好吧,这是否意味着我只需要按如下方式初始化客户端对象,就像魔术一样,我的凭据会始终保持最新状态?

    # one way...credentials is a hash with an access and refresh token and a bunch of other key value pairs

    Signet::OAuth2::Client.new(credentials)

    # another way
    client_secrets = Google::APIClient::ClientSecrets.new({web: credentials})

    auth_client = client_secrets.to_authorization

我愿意相信文档,但我可能会误读它。此外,如果我知道如何每个月左右为用户“刷新”我的凭据以避免它过期的可能性,那就太好了。任何人都可以与我分享他们如何使用官方google gem 定期刷新用户凭据,或者对有关此神奇刷新的文档有所了解,“客户端对象将根据需要刷新访问令牌”?

【问题讨论】:

    标签: ruby oauth-2.0 google-oauth


    【解决方案1】:

    是的,默认的Ruby Google API client gem 确实包含自动刷新。正如您所提到的,您必须首先指定“离线”范围才能在第一次身份验证时获取刷新令牌。

    也就是说,虽然我没有使用过 Signet,但我之前使用过 Omniauth 手动刷新令牌。它是这样的。

    def refresh_oauth
      strategy = OmniAuth::Strategies::GoogleOauth2.new(
        nil,
        Rails.application.secrets.fetch(:google_client_id),
        Rails.application.secrets.fetch(:google_client_secret),
      )
    
      client = strategy.client
    
      token = OAuth2::AccessToken.new(
        client,
        oauth_token,
        refresh_token: refresh_token,
      )
    
      token.refresh!
    end
    

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 2018-02-20
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      相关资源
      最近更新 更多