2017-08-04 234 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 
    } 
};