ログオンは正常に機能しますが、有名な 3600 秒後に有効期限が切れます。新しいトークンをリクエストできるという情報を読んでください。わかりましたが、これはこの質問の今日のトピックではありません。
セッションの有効期限が切れた後、または別のユーザー アカウントに変更したい場合、ログイン ウィンドウをポップアップする方法やログイン ウィンドウを強制的にポップアップする方法がわかりません。
API の例では、immediate
プロパティを使用しています。これを false に設定すると、ウィンドウがポップアップしますが、ほんの一瞬です! ポップアップして消えます。これは、ユーザーが以前にログインしたことがない場合や、ブラウザからすべての 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() はデバッグ ウィンドウへのショートカットです
- o. カプセル化されたオブジェクトであり、「this」へのショートカットです
ログインボタンのコード onclick (jquery):
$j('#login_button').bind('click', function()
{
o.cdGoogleAutorize( function()
{
// do something
}, true, true );
});
ログインポップアップウィンドウを強制する方法はありますか?