我有一个应用程序,它使用谷歌登录来获取YouTube频道的信息(上传视频、订阅等)。当用户尝试登录时,他们可以从谷歌帐户列表中进行选择,如果用户有多个帐户,则可以从YouTube频道列表中选择。但是,当选择YouTube频道时,API会失败。
var login=函数(选项){
if (!gapi.auth2){
// Retrieve the singleton for the GoogleAuth library and set up the client.
gapi.load('auth2', function(){
gapi.auth2.init({
client_id: config.credentials.googleApiClientId,
cookiepolicy: 'single_host_origin',
scope: 'https://www.googleapis.com/auth/youtube.readonly'
});
});
}
var GoogleAuth = gapi.auth2.getAuthInstance();
return GoogleAuth.signIn(options);
};
在回调JavaScript中,Google API说:
对象{type:"tokenFailed",idpId:"google",错误:"USER_LOGGED_OUT"}
遇到了类似的问题,经过一段时间的实验,我终于解决了这个问题,我不完全确定问题出在哪里——我改变的是将prompt: 'select_account'
添加到signIn
调用选项,将fetch_basic_profile: false
添加到init
调用选项:
这里有一个可能适用于您的jsbin,请确保将您自己的client_id添加到init调用中,并确保将output.jsbin.com域列入白名单,并从该域预览jsbin。
var auth2 = gapi.auth2.init({
client_id: '',
scope: 'https://www.googleapis.com/auth/youtube',
fetch_basic_profile: false,
cookie_policy: 'single_host_origin'
});
auth2.signIn({
scope: 'https://www.googleapis.com/auth/youtube',
prompt: 'select_account'
}).then(function(result) {
console.log('Signed in!');
console.log(result);
}, function(error) {
console.log(error);
});