Кто-нибудь использует 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);
});