我正在使用webapp2的appengine應用程序。我基於我在this article中提出的想法進行認證。Webapp2列表(和/或殺)用戶的所有會話(Appengine Python)
我添加了刪除帳戶(這是應用程序的要求)的功能,並且遇到了會話問題。如果用戶從多個位置登錄,則該用戶將有兩個身份驗證令牌。當帳戶從其中一個登錄名中被刪除時,該登錄名的會話被銷燬。但是,其他登錄將在數據存儲中具有身份驗證令牌。
我修改了user_required
/check_login
修飾符/函數,以便它首先在會話中查找用戶。如果它找不到,我讓客戶知道他們需要登錄。如果找到了,我會從數據存儲中獲取用戶。如果它是None,那麼我假設有多個登錄,而另一個帳戶被刪除(這也會刪除用戶)。因此,我終止會話,並告訴客戶端用戶不再存在。否則,我會檢查用戶是否已通過驗證,如果不是,我會告訴客戶必須驗證用戶才能執行任何操作。
如果帳號被刪除,我寧可殺死用戶的所有會話。有沒有辦法做到這一點?我也想要這個功能,這樣我就可以擁有一個功能,登錄的用戶可以看到該用戶的所有會話,並隨意殺死/撤銷它們(有點像Facebook和Google,我相信很多的其他服務)報價。
編輯:即使我可能會最終得到從數據存儲用戶在某些時候反正,當我打電話self.user
它是一個webapp2.cached_property
,我還是寧可不要有讓用戶在每個請求的開頭都用user_required
裝飾,如果我可以逃脫只從會話中拉取信息。
如果您在針對數據存儲區的每個請求中檢查用戶的會話,那麼我認爲您已經在盡力了。在這種情況下,除非實際詢問是否可以刪除用戶計算機上的Cookie,否則這是不可能的。 – dlebech
@dlebech當我說擺脫了會話,我的意思是把它從數據存儲區中取出,以便下一次用戶嘗試使用該登錄名時,user_required方法將會說該會話沒有用戶。無論是因爲用戶刪除了帳戶,還是因爲用戶撤銷了該會話(如果我能夠列出該用戶的所有當前會話並允許用戶「撤銷/刪除」會話(意思是在數據存儲中刪除它)) – Eliezer
感謝您的澄清。在這種情況下,我認爲[來自dragonx的答案](http://stackoverflow.com/a/18447663/2021517)是適當的。 – dlebech