我在Google驱动器api身份验证中使用OAuth2.0。我有一个isSignedIn
侦听器,具有afterSignIn
作为回调。
我的问题:登录后出现,没有触发afterSignIn()
函数。有人知道如何解决这个问题吗?
function googleDriveAuthentication($rootScope){
var API_KEY = '...'
var CLIENT_ID = '...';
var SCOPES = 'https://www.googleapis.com/auth/drive';
this.authenticate = function(){
gapi.load('client:auth2',authorize);
}
function authorize(){
gapi.client.setApiKey(API_KEY);
gapi.auth2.init({
client_id: CLIENT_ID,
scope: SCOPES
}).then(function(authResult){
var auth2 = gapi.auth2.getAuthInstance();
auth2.isSignedIn.listen(afterSignIn);
auth2.signIn();
});
}
function afterSignIn(){
console.log('authenticated successfully');
$rootScope.authenticated = true;
$rootScope.$broadcast('authenticated');
gapi.client.load('drive', 'v3');
}
}
最佳答案
在这里afterSignIn是一个监听器函数,listener是一个带有 bool(boolean) 值的函数。用户登录时,listen()传递给此函数,而用户退出时,传递给false。
在这里,您的函数应该有一个参数。请参阅此文档https://developers.google.com/identity/sign-in/web/listeners
// Listen for sign-in state changes.
auth2.isSignedIn.listen(afterSignIn);
您将不得不将您的侦听器功能更改为
var afterSignIn = function (val) {
console.log('Signin state changed to ', val);
$rootScope.authenticated = val;
if(val == true){
$rootScope.$broadcast('authenticated');
gapi.client.load('drive', 'v3');
}
};