【发布时间】:2014-06-02 22:50:56
【问题描述】:
我正在使用 google+ 的客户端登录。访问令牌将在 1 小时后过期。令牌过期后调用gapi.auth.signOut() 不会注销用户。如果用户的令牌已过期,我正在尝试通过使用 client_id、范围和 immediate = true 参数调用 gapi.auth.authorize 来重新授权用户。调用此方法后,gapi.auth.signOut() 不起作用。我不明白为什么会这样。
代码如下:
var google = {
signOut: function() {
var token = gapi.auth.getToken();
if(!token) {
var params = {
'client_id': global.clientid,
'session_state': global.sessionState,
'response_type':'token'
}
gapi.auth.checkSessionState(params, function(state){
if(state == true) {
google.doSignOut();
} else {
google.silentAuthorize(function(data){
google.doSignOut();
});
}
});
} else {
google.doSignOut();
}
},
doSignOut: function() {
gapi.auth.signOut();
google.loggedin = false;
},
silentAuthorize: function(callback) {
var params = {};
params.client_id = global.clientid;
params.immediate = true;
params.scope = "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/plus.login"
gapi.auth.authorize(params, callback);
}
}
在令牌尚未过期时调用 google.signOut 可以正常工作。但是一旦令牌过期或者我简单地调用 google.silentAuthorize() 并回调,调用 gapi.auth.signOut() 就会开始抛出错误:
TypeError:无法读取 null 的属性“clear”
现在已经尝试解决这个问题 4 小时,非常感谢任何帮助!
【问题讨论】:
标签: google-plus google-oauth google-authentication