2017-08-04 156 views
2

我在React中有一個自定義的Google Sign In按鈕(遵循品牌指南),我需要將其實施到Web應用程序中。 Android應用已經使用BE實施Google登錄,並要求授權代碼發送給BE。我似乎無法訪問授權碼(儘管我可以很容易地獲得訪問令牌,標識和id_token)。Google OAuth2 JS無法獲得授權碼

我初始化這樣:

static googleInit (googleSignInID) { 
    gapi.load('auth2',() => { 
     ThirdPartyLogInApi.auth2 = gapi.auth2.init({ 
      // Retrieve the singleton for the GoogleAuth library and set up the client. 
      client_id: `${googleSignInID}.apps.googleusercontent.com`, 
     }) 
    }) 
} 

在我的陣營分量,我附上一個單擊處理程序,以一個陣營REF(正如我在其它計算器問題見過)。

componentDidMount() { 
    // element, options, success, failure 
    ThirdPartyLogInApi.auth2.attachClickHandler(
     this.button, 
     {}, 
     this.onGoogleSuccess, 
     this.setProcessingToFalse 
    ); 
} 

在成功回調(this.onGoogleSuccess),我能叫googleUser.getBasicProfile()來獲取用戶信息和googleUser.getAuthResponse(真),以獲得id_token和的access_token,但我需要的授權碼太。

我在我的智慧結束與谷歌的文檔就此 - 有人能指點我在正確的方向嗎?我不想切換整個認證流程來使用gapi.auth2.authorize,因爲我確實需要用戶信息。

謝謝

編輯:它甚至可以訪問授權碼嗎? Google似乎將這個步驟抽象出來,然後立即返回id_token。我需要的東西,看起來像: 4/RQFWJLGd3sJQrgxuRaguzJy2yiUV4fAqVGftRSUYuqc

+0

嗨,你有沒有設法解決這個問題?我和你在同一條船上。獲得授權碼的唯一方法是調用'auth2.grantOfflineAccess()',但是會提示另一個登錄請求。它應該使用'gapi.auth2.init()'或'auth2.grantOfflineAccess()';不確定如何只用一個電話就能逃脫。 –

回答

0

我知道這是一個老問題,但我會在這裏發佈我的回答對遇到同樣的問題有任何問題。

授權碼不需要後端,如果你已經有了一個訪問令牌(僅當您使用的是Google Sign-In button),只需使用由googleUser.getAuthResponse().access_token提供的訪問令牌,使那些需要訪問令牌的所有後端請求。

以下是獲取使用訪問令牌的所有用戶別名的示例。

var options = { 
    'uri': 'https://www.googleapis.com/admin/directory/v1/users/'+userEmail+'/aliases', 
    'method': 'GET', 
    'body': '', 
    'headers': { 
    'Content-Type': 'application/json', 
    'Authorization': 'Bearer '+access_token 
    } 
};