有人使用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);
});