2013-08-16 19 views
1

登錄工作正常,但在着名的3600秒後,它將過期。已閱讀關於它的一些信息,您可以申請一個新的令牌。好的,但這不是今天這個問題的主題。谷歌雲端硬盤API:強制登錄彈出窗口再次登錄或作爲另一個用戶登錄

會話過期後或我想更改爲其他用戶帳戶,我無法弄清楚如何彈出登錄窗口或強制彈出登錄窗口。

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


    }; 
......... 
......... 
......... 

要clearify一些事情:

  • $ d()是快捷方式調試窗口
  • o。是封裝的對象和 快捷方式「這個」

一些登錄按鈕代碼的onclick(jQuery的):

$j('#login_button').bind('click', function() 
{ 
    o.cdGoogleAutorize(function() 
    { 
    // do something 
    }, true, true); 
}); 

任何想法如何強制登錄彈出窗口?

回答

0

Got it!

但是,如果有任何其他想法,請讓我知道。我意識到使用此解決方案註銷所有應用程序和其他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; 
    } 
0

要回答你的第一個問題,你需要request offline access這將給你一個刷新令牌。您可以使用刷新令牌在第一個3600秒過期後請求新的訪問令牌,無需再次讓用戶重新登錄。

+0

啊,謝謝你的回答。請閱讀該頁面。正如我之前解釋的,無論如何彈出登錄窗口作爲另一個用戶登錄都是不可能的。隨着我發佈的代碼,這是可能的,僅僅幾分鐘後。 – Codebeat

+0

Jay Lee <你知道如何找出一個會話過期嗎? – Codebeat

+0

gapi.auth.getToken()始終是一個空對象? – Codebeat