2014-12-03 93 views
0
  • 我正在寫一個使用谷歌API與G +帳戶在我們的應用程序進行身份驗證的應用程序註銷。
  • 目前客戶希望註銷不僅爲我們的應用程序撤銷訪問令牌,而且還從用於驗證的Google帳戶註銷。

我特地用的解決方案是:如何從谷歌帳戶使用AngularJS

/** 
* Signs the user out. 
*/ 
HeaderCtrl.prototype.signOut = function() { 

    // this part revokes token 
    $http.jsonp('https://accounts.google.com/o/oauth2/revoke?token=' + 
     accessToken, { 
     params: { 
      callback: 'JSON_CALLBACK', 
      format: 'json' 
     } 
     }).success(/* Do stuff on success */); 

    // this part logs out from google account 
    $http.jsonp('https://accounts.google.com/logout'); 
}; 

第二個電話的作品,但在響應處理記錄一個錯誤:

拒絕從「https://accounts.google.com/logout」執行腳本,因爲它MIME類型('text/html')不可執行,並且啓用嚴格的MIME類型檢查。

什麼方法可以使用AngularJS從Google帳戶註銷?

回答

2

你不應該從Google註銷你的用戶,他們肯定不希望它。因此,永遠不應該達到https://accounts.google.com/logout

你真正想要的是讓他們從您的網站註銷。撤銷令牌應該足夠Google身份驗證的一方(您的網站不會假定客戶端已從其舊令牌登錄)

一旦signOut方法被調用,只要考慮他不再記錄並結束會話在你的網站上。

+0

我同意這一點,但不幸的是無法說服仍然想從Google帳戶註銷用戶的客戶。 – Herring 2014-12-03 17:49:08

+0

也許你可以顯示谷歌註銷頁面的鏈接?無論如何,您可能無法從您的網站動態註銷Google,因爲必須打開註銷頁面以檢查Cookie /本地數據。我認爲解決方案是向您的客戶解釋,如果瀏覽器允許這種跨站請求,這將是安全漏洞。 – blint 2014-12-04 14:30:41

+0

我實際上能夠按照我在帖子中所寫的內容註銷。只是我看到了錯誤信息 - 這使我困擾。 – Herring 2014-12-05 01:00:05

2

我認爲你正在做許多與「正常註銷」體驗無關的事情。

也許你應該跟你的「客戶」,以澄清他/她想要的用戶故事。

一個正常的退出是JS的一列(source):

gapi.auth.signOut(); 

如果我沒看錯,你首先做在你的代碼(即撤銷訪問令牌),是一些提供一個選項remove the association between the account on your app and the google account used for sign-in。如鏈接所示,您必須向用戶提供此選項才能遵循g +開發者政策,但與退出登錄不同。也許您應該嘗試以用戶身份在提供g +登錄的網站上使用這兩項功能,例如堆棧溢出。 (一定要知道撤銷G +關聯之前您的密碼。)

而對於註銷的谷歌,你的應用程序不應該這樣做,和谷歌不應該爲您提供一種方式來做到這一點。 (我寧願認爲這是不可能的。)

但是,您可以在退出登錄後提醒您的用戶,他/她可能還需要從Google註銷。嘗試從堆棧溢出註銷,看看會發生什麼。

+0

你說的訪問撤銷工作與gapi.auth.signOut()類似,所以我可能會轉而使用它,因爲它看起來更整齊。不幸的是,客戶堅持讓Google帳戶退出... – Herring 2014-12-03 18:22:12

+0

如果您可以與您的客戶交談,也許您應該嘗試類似「您有公共網站的示例使用g +以您想要的方式登錄?」。 然後,在查看網站後,您可以找到方法來執行此操作,也可以告訴客戶網站沒有這樣做,這可能是不可能的。 – dotpush 2014-12-03 18:31:05

+0

更新:看起來像gapi.auth.signOut()不撤銷訪問令牌。這不是我要找的。 – Herring 2014-12-03 18:38:26