2014-01-15 29 views
1

我知道答案是什麼,但我只想嘗試我的運氣。以Facebook爲例,我使用omniauth-facebook來允許用戶登錄到我的網站。登錄後,用戶可以在本網站上設置一些隱私數據。Omniauth Strategies - 在共享系統上管理多個用戶

考慮一個場景,我有2個用戶U1U2。他們都在我的網站使用Facebook單獨登錄並分別授權該應用。現在考慮一個共享系統,U1來到我的網站,點擊Login using Facebook,驗證自己,一切都好。 U1離開,但不從Facebook註銷。現在U2出現,點擊Login using Facebook並使用U1的憑證自動登錄。我不會在任何時間儲存用戶的access_token

有什麼辦法可以阻止這種情況發生?我能想到的最好的辦法是在FB的身份驗證和我的站點的回調之間添加一箇中間頁面,並詢問用戶是否是FB的預期用戶。如果是這樣,繼續,否則帶她去登錄頁面。但是這並不涉及U2仍然可以看到U1的頁面的事實。

任何輸入將不勝感激。

編輯:我針對Facebook,Twitter,LinkedInGoogle。所以我正在尋找一個通用的解決方案。我知道FacebookTwitter有強制驗證的可能性,但我想實施一個通用解決方案。

回答

1

的Facebook(和omniauth Facebook的)提供了選項auth_type,以防止這一點:

use OmniAuth::Builder do 
    provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], 
    :auth_type => 'reauthenticate' 
end 

使用此選項,用戶將被要求輸入的時候,他嘗試使用登錄到您的服務他的密碼Facebook的。查看gem's documentation瞭解更多信息。

最後一個注意事項:此選項僅適用於omniauth-facebook。其他OmniAuth提供商可能有類似的選擇,但其他OmniAuth提供商可能根本沒有。例如,Twitter有一個force_login選項,當設置爲true時會從Twitter註銷用戶。有時候這就是你想要的,有時候不是。從其他服務註銷用戶可能非常麻煩。我實際上喜歡是否所有提供者都有這兩個選項,以便我們可以選擇使用哪一個(從外部服務註銷用戶或再次請求密碼),但我想我們必須滿足於我們的需求有。例如,據我所知,Google無法保護這一風險。

+0

對不起,我沒有更新我的問題。我昨天才知道這個選項。我在單一提供者的腦海裏形成了這個問題,但我希望爲'Facebook','Twitter','LinkedIn'和'Google'這樣做。 –

+0

看到我編輯的答案。沒有一個選項適用於每個omniauth寶石。您只需調查這些服務的OAuth流程及其各自的omniauth寶石。 – Ashitaka