Google API access_token в Safari с использованием ux_mode: 'redirect' - PullRequest
0 голосов
/ 18 декабря 2018

Кто-нибудь использует ux_mode: 'redirect' и получает Google access_token в браузере, отличном от Chrome?

При использовании ux_mode: 'redirect' (чтобы избежать всплывающего окна Google), я могу войти в системуУ пользователя нет проблем и получите access_token для доступа к API Google.Это работает для всех браузеров.Однако при использовании ux_mode: 'redirect' я могу получить id_token только в том случае, если я нахожусь в Chrome, а вход в систему также подписал пользователя в Chrome.(Я спросил здесь о SO, могу ли я получить access_token от id_token, но не повезло.)

В браузерах, отличных от Chrome, я получаю нулевое значение для GoogleAuth после того, как вход перенаправляет наredirect_uri.

Вот мой конфиг:

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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...