使用Angular Web应用程序中的GoogleSignInComponent登录后对请求进行身份验证

时间:2018-09-08 22:47:05

标签: angular google-cloud-platform google-signin google-authentication

我正在编写一个Angular-Web应用程序,我想在其中列出已登录用户的Google Cloud Platform项目。

要登录用户,我使用了npm中的'angular-google-signin'npm软件包,范围为https://www.googleapis.com/auth/cloud-platform.read-only,就像Google API Explorer中提到的那样。

这将返回一个事件,其中包含一个带有如下所示的AuthResponse的gapi.auth2.GoogleUser:

{
  "token_type": "Bearer",
  "access_token": "some token",
  "scope": "https://www.googleapis.com/auth/cloud-platform.read-only https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.me openid email profile",
  "login_hint": "some hint",
  "expires_in": 2077,
  "id_token": "some id Token",
  "session_state": {
    "extraQueryParams": {
      "authuser": "0"
    }
  },
  "first_issued_at": 1536444745852,
  "expires_at": 1536448345852,
  "idpId": "google"
}

但是我无法针对Google API创建请求。 gapi.client始终是未定义的,并且也是一个简单的REST-Request,其标头中的access_token为Bearer:access_token不起作用。我想念什么?

angular-google-signin组件的回调如下所示,并且用户已成功登录:

  onGoogleSignInSuccess(event: GoogleSignInSuccess) {
    // console.log(JSON.stringify(event));
    const googleUser: gapi.auth2.GoogleUser = event.googleUser;
    console.log(JSON.stringify(googleUser.getAuthResponse()));
    const id: string = googleUser.getId();
    const profile: gapi.auth2.BasicProfile = googleUser.getBasicProfile();
    console.log('ID: ' +
      profile
        .getId());
    console.log('Name: ' + profile.getName());

    // request({
    //   uri: 'https://cloudresourcemanager.googleapis.com/v1/projects',
    //   method: 'GET',
    //   headers: {
    //     'Bearer': googleUser.getAuthResponse().access_token
    //   }
    // }, res => {
    //   console.log(res);
    // });

    // gapi.client.load('cloudresourcemanager', 'v1').then((value: any) => {
    //   console.log(value);
    // }).catch((error: any) => {
    //   console.error(error);
    // });
  }

如何创建和验证请求以获取用户项目?我无法正常工作。

预先感谢

2 个答案:

答案 0 :(得分:0)

好吧,我现在有点傻:

在网址中添加?access_token = xxxxx即可解决该问题。

答案 1 :(得分:0)

我猜你只是错误地指定了标题:

    request({
      uri: 'https://cloudresourcemanager.googleapis.com/v1/projects',
      method: 'GET',
      headers: {
        'Authorization': 'Bearer ' + googleUser.getAuthResponse().access_token
      }
    }, res => {
      console.log(res);
    });