登录工作正常,但在著名的 3600 秒后它将过期。已阅读有关它的一些信息,您可以请求新令牌。好的,但这不是今天这个问题的主题。
会话过期或我想更改为另一个用户帐户后,我无法弄清楚如何弹出登录窗口或强制弹出登录窗口。
在 API 示例中,他们使用该immediate
属性,当将其设置为 false 时,窗口将弹出但....只有一瞬间!它弹出并消失。当用户之前从未登录过或当您从浏览器中删除所有 cookie 时,这种情况永远不会发生。
我正在考虑销毁所有 cookie,但它们位于另一个域中,因此我无法使这些 cookie 无效以强制弹出登录窗口。尝试了几件事,重新创建对象,使令牌无效等,即使会话过期,它也不想再次弹出。
我能做些什么呢?这是我编写的一些代码(注意:oauth2 和所有必要的东西都已经加载)
o.cdGoogleAutorize = function( fCallback, bPopUp, bForce )
{
var w = window,
fc = (typeof fCallback == 'function')?fCallback:function(){},
bp = (typeof bPopUp == 'boolean')?bPopUp:false,
clid = w.GAPI_CLIENT_ID+'.apps.googleusercontent.com';
try
{
if( !w.gapi || !w.gapi.auth || !w.gapi.auth.authorize )
{ return false; }
} catch(e) { return false; }
var aScope = w.GAPI_AUTH_SCOPES.split(','),
i = aScope.length;
while( i-- )
{ aScope[i]='https://www.googleapis.com/auth/'+aScope[i]; }
aScope.push('openid');
if( bForce )
{ gapi.auth.setToken('');
$d('force'); gapi = o.newInstance( gapi );
} // invalidate object/token etc //gapi.auth.setToken(token)
// authorize
gapi.auth.authorize({
client_id:clid
,scope:aScope
//user_id: uUserId,
,immediate: bp?false:true
},
function(op)
{
if( typeof op == 'object' && op != null && op.client_id == clid )
{
// $d( op.scope );
// gapi.client.load('oauth2', 'v2', function()
//{
gapi.client.oauth2.userinfo.get().execute(function(resp)
{
//$d( resp );
if( !resp.code && resp.id )
{ fc( resp.id ); }
else {
//if( !bPopUp )
{ fc(false); }
}
});
//});
}
else fc(false);
});
};
.........
.........
.........
澄清一些事情:
- $d() 是调试窗口的快捷方式
- ○。是封装的对象和“this”的快捷方式
登录按钮的一些代码onclick(jquery):
$j('#login_button').bind('click', function()
{
o.cdGoogleAutorize( function()
{
// do something
}, true, true );
});
任何想法如何强制登录弹出窗口?