首先重要的是要注意,在我的應用程序中,如果你註銷會話仍然有效,你不會只是重定向回到登錄頁面,但保持在同一頁面上。爲什麼沒有WebSecurity.Logout *立即*更新IPrincipal.User爲空用戶
隨着中說 - 無論這兩種方式我使用MVC應用程序
FormsAuthentication.SignOut()
WebSecurity.Logout()
的效果是一樣的,如果我馬上訪問既不以下性質的變化,以反映註銷退出其中:
User.Identity.Name
Thread.CurrentPrincipal.Identity
現在 - 如果我做一個重定向,或只是重新加載頁面那麼顯然這些屬性將更新爲空的用戶。他們並不立即表示User.Identity.Name
代表剛剛註銷的用戶。
這是一個問題,因爲我想在登錄/註銷後生成You are logged in as XXX
表單的文本 - 而且這可能出現在無法重定向的AJAX情況下。
我很好奇,如果有任何的方式來觸發IPrincipal
註銷(或登錄)後自行復位。
我認爲Logout()
調用後通常只有Redirect()
,所以這從來不是問題,但在AJAX的情況下,這並不總是實際的。
我目前的解決方案是抽象的,我自己的包裝標識,所以一旦我登出我就可以更新。我只是有點擔心,這可能會有一些模糊的副作用,特別是如果有人直接訪問IPrincipal
而不是通過包裝。
我真的不明白這裏的問題?爲什麼在使用ajax觸發註銷後會運行更多代碼?接下來的行動將是一個新的要求。 – mattmanser
@matt就是這一點。如果您的意思是重定向(),我不想要「下一個操作」。它不應該是必須的 - 如果'更多的代碼'不會導致500錯誤,auth cookie仍然會被清除。事實上,這個'更多的代碼'是微不足道的,只是返回一些包含'當前用戶'的JSON,但User.Identity返回'舊'用戶。我想最終我沒有看到任何技術原因,爲什麼它不立即清除。我的'包裝'工作得很好,但我只是想了解是否有理由不清除它或者它是一個疏忽。 –
登錄時也是如此 - WebSecurity.CurrentUsername未更新,也不是IPrincipal。我在頁面上有一個可選登錄的購物車頁面。我需要跟蹤e登錄是否成功,而不僅僅依賴於WebSecurity.CurrentUsername –