Safari中使用ux_mode的Google API access_token:“重定向”

时间:2018-12-18 06:18:07

标签: angular typescript google-api google-authentication angular7

有人使用ux_mode:'redirect'并在除Chrome之外的浏览器中获取Google access_token吗?

在使用ux_mode:'redirect'(以避免Google弹出窗口)时,我可以毫无问题地登录用户并获得用于访问Google API的access_token。它适用于所有浏览器。但是,当使用ux_mode:'redirect'时,除非我在Chrome中并且登录也已将用户登录到Chrome,否则我只能获得id_token。 (我在这里问过,是否可以从id_token获取一个access_token,但那里没有运气。)

在非Chrome浏览器中,登录重定向到redirect_uri后,GoogleAuth的值为空。

这是我的配置:

const gapiClientConfig: GapiClientConfig = {
  client_id: CLIENT_ID,
  discoveryDocs: [ DISCOVERYDOCS ],
  scope: [ SCOPES ].join(' '),
  ux_mode: 'redirect',
  redirect_uri: environment.redirect_uri
};

这是我初始化GoogleAuth的方式:

    gapi.load('auth2', () => {
           gapi.auth2.init(this.googleApi.getConfig().getClientConfig())
.then((auth: GoogleAuth) => {
                observer.next(auth);
                observer.complete();
              });
          });

这是我的登录方式:

        auth.signIn().then( function() {
            // this code never runs because of the redirect to another page
            const profile = auth.currentUser.get().getBasicProfile();
            console.log(profile);
          });

我也尝试了此版本的登录代码,但没有帮助。

Promise.resolve(auth.signIn()).then(function() {
    // this never runs
    const profile = auth.currentUser.get().getBasicProfile();
      console.log(profile);
    }).catch(function(error) {
    if (error && error.error === 'popup_blocked_by_browser') {
       // A popup has been blocked by the browser
       } else {
       // some other error
    }
});

这是我登录后获取access_token的方式:

let googleUser: GoogleUser;
this._googleAuth.getAuth(gapiClientConfig)
  .subscribe((auth) => {
      // this only works in Chrome
      googleUser = auth.currentUser.get();
      const profile = googleUser.getBasicProfile();
      console.log('profile redirectLogin:', profile);

      googleToken = googleUser.getAuthResponse(true).access_token;
      console.log('Google user redirectLogin:', googleUser);
});

0 个答案:

没有答案