1

ログオンは正常に機能しますが、有名な 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 );
 });

ログインポップアップウィンドウを強制する方法はありますか?

4

2 に答える 2

0

最初の質問に答えるには、オフライン アクセスをリクエストして、更新トークンを取得する必要があります。最初の 3600 秒の有効期限が切れた後、更新トークンを使用して新しいアクセス トークンを要求できます。ユーザーに再度ログインさせる必要はありません。

于 2013-08-16T01:24:30.710 に答える
0

とった!

しかし、他にアイデアがあれば教えてください。このソリューションを使用すると、アプリやその他の Google サービスのすべてのドライブ接続がログアウトされることに気付きました。このアクションの間に警告ダイアログを使用することをお勧めします。

アカウントのログアウト ボタンのコードを使用し、これを iframe で使用しています。これを読み込んだ後、再度ログインをリクエストします。関数の本体の先頭に次のコードを追加します。

  if( bForce )
  { 
    var $oFrame = $('<iframe class="hidden" src="https://www.google.com/accounts/Logout?service=wise&amp;continue='+
                      'https://drive.google.com/?authuser%3D0"></iframe>');
    $oFrame.bind('load', function()
    {
      // Give it a sec
          setTimeout( function() 
      { o.cdGoogleAutorize( fCallback, true ); 
        $oFrame.remove();
      }, 1000 );
    }).appendTo('body');
    return true;
  } 
于 2013-08-16T01:29:33.240 に答える