我在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');
   }
};

08-07 09:31