2017-03-28 36 views
3

我正在向我的AspNetUsers表添加自定義Disabled列,以便管理員可以臨時禁用某個帳戶。 (它看起來像LockoutEndDateUtc不能正常工作,因爲我需要。)到期用戶會話(當前用戶除外)

但是,如果管理員在用戶登錄時禁用帳戶會怎麼樣?我不想檢查當前用戶帳戶是否在每個請求上都被禁用,我正在尋找一種方法來終止該用戶的會話,以便下一個請求將要求他們登錄。

我相信這是由一個曲奇餅。這可能嗎?

+0

看起來像你需要一些代碼在每個請求上執行。這是'Application_BeginRequest'的用途。在那裏寫代碼來檢查用戶的狀態,然後在他們被禁用時將其註銷。看起來很簡單。請注意,你會希望這是一個非常快速的檢查,因爲它會發生每個請求。 – mason

+0

@mason:是的,我考慮過。這可能是一種合理的回退方式。儘管如此,這裏還是會有小幅的表現。我有點希望能更好地理解跟蹤用戶會話的人可能會知道一種方法來使其失效。 –

+1

沒有什麼魔法會自動注意到你翻轉了數據庫中的一個字段,從而將用戶註銷。你需要自己編寫代碼。如果你想讓支票發生每一個請求,那就是你做的地方。我*假設*您可以進行AJAX輪詢或SignalR或某事來監視用戶的狀態,並偵聽某種「用戶禁用」事件從服務器推送。您需要運行後臺進程才能發出通知。再一次,你必須接線,而不是開箱即用。 – mason

回答

5

其實這可以自動完成。在用戶存儲中的ASP.NET Identity中,有一個名爲SecurityStamp的屬性。當你改變這個時,用戶被強制重新認證下一個請求。這是因爲該字段用於生成身份驗證令牌(在您的情況下爲cookie)。該框架內置了用於直接更改該方法的方法,或者直接或間接地更改該方法。一個很好的例子是什麼時候間接改變了身份的密碼是通過框架更新的(即呼叫UpdatePasswordRemovePasswordAsync),或者當爲身份啓用2因素身份驗證時。

更改安全標記的方法可以在UserManager中找到,稱爲UpdateSecurityStampAsync。從文檔:

爲用戶生成新的安全印記,用於SignOutEverywhere功能。

+0

聽起來很有趣。去嘗試和研究這個。 –

+0

當用戶更改密碼強制從所有位置註銷時,安全戳也會更新。 –

+0

@MartinLiversage - 正確,也許我的措辭不清楚?讓我看看我是否可以重新... ... – Igor