2017-09-24 11 views
0

사용자 자격 증명을 얻기 위해 인증 절차를 완료 할 수 있습니다. 그러나 자격 증명이 만료되지 않고이 자격 증명을 계속 사용할 수 있는지 확인하고 싶습니다. 나는 token expiration에 대한 규칙을 완전히 알고 있습니다.Ruby에서 Google 인증 자격증 명을 새로 고치는 방법

그러나 주기적으로 사용자의 자격증 명을 '새로 고'주기를 원할 경우 영구히 사용할 수 있도록 할 수 있습니다. Howe는 저것을하는 것에 대해 갈 것이냐?

"클라이언트 개체가 필요에 따라 액세스 토큰을 새로 고칩니다"라는 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 공문서로 새로 고침 또는 마법의 새로 고침에 대한 설명서에서 "클라이언트 개체가 필요에 따라 액세스 토큰을 새로 고칩니다"라고 표시합니다.

답변

0

예, 기본값 인 Ruby Google API client gem은 자동 새로 고침을 포함합니다. 언급했듯이 첫 번째 인증에서 새로 고침 토큰을 얻으려면 "오프라인"범위를 지정해야합니다. 나는 인장을 사용하지 않은 반면, 나는 수동으로 이전 토큰을 새로 Omniauth를 사용한 말했다

  • Test case for refreshing expired token
  • Refresh Authorization Method

    • . 그것은 이런 식으로 진행됩니다.

      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