2012-09-11 53 views
13

在我的應用程序中,我使用Forms-Authentication來登錄和註銷用戶。如何在其他用戶更改他/她的用戶名時強制退出用戶?

一個功能是管理員可以更改其他用戶的用戶名。在這種情況下,我需要註銷用戶名更改的用戶。

如果我不這樣做,因爲之前設置自己的餅乾,他們訪問應用程序和收到錯誤消息(因爲他們的用戶名不存在,有些情況下我用自己的用戶名某些功能部件)。

我怎麼能強制用戶進行註銷使用表單的身份驗證?

UPDATE:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string controller = filterContext.RouteData.Values["controller"].ToString(); 
     string action  = filterContext.RouteData.Values["action"].ToString(); ; 
     // Below returns the previous username, which does not exist anymore in db. 
     string userName = HttpContext.Current.User.Identity.Name; 

     UnitOfWork unitOfWork = new UnitOfWork(); 

     if (!unitOfWork.UserRepository.UserExists(userName)) 
     { 
      FormsAuthentication.SignOut(); 
      filterContext.HttpContext.Session.Clear(); 
      filterContext.HttpContext.Session.Abandon(); 
      // I am not using Roles. 


     } 
     unitOfWork.Dispose(); 
     base.OnActionExecuting(filterContext); 

    } 

在我的客戶全局過濾,我檢查用戶是否存在與否,如果不是我簽出來。但是,它不起作用。我的意思是他們通過身份驗證並獲得應用程序訪問權限。

在此先感謝。

回答

9

這裏就是你要做的強制用戶退出:

public void UserPasswordChangedHandler() 
{ 
    FormsAuthentication.SignOut(); 
    Roles.DeleteCookie(); 
    Session.Clear(); 
} 

我不認爲行所要求的行解釋,其自我解釋不夠。 如果我錯了,請讓我知道。

更新

直截了當地回答你的另一個問題是每個用戶布爾跟蹤,以保持如果他的數據是由admin,如果是更新 - 只是他重定向到登錄頁面。

請參閱下面的文章強制退出使用窗體身份驗證信息:

更新2

清除cookie

希望這有助於你。

+2

我認爲這表明用戶登錄。我想註銷其他用戶,其密碼由admin更改。那麼,我當然可以使用此代碼簽署該用戶註銷,但我怎麼能理解,他們的密碼是改變?換句話說,當這個方法應該被調用? –

+0

很高興我提供的代碼是有幫助的。要回答您的其他問題(如何處理),請參閱我的答案中的更新。 –

+0

再次感謝。我在我的自定義ActionFilterAttribute篩選器中使用您的代碼。在那裏,我檢查用戶名是否存在,如果不存在(當我更改我自己的用戶名時滿足這個條件),我簽署用戶。但是,問題依然存在。用戶的cookie保持不變,他可以訪問應用程序。有任何想法嗎 ?我用過濾器代碼更新了我的問題。 –

2

當用戶需要變得無效,你必須將他們的詳細信息添加到某種內部靜態列表。

然後在每個頁面請求(可能使用Application_BeginRequest)上查看當前用戶是否在該列表中,如果是,則在那裏調用FormsAuthentication.SignOut。

這似乎是一個黑客攻擊的一位,但它是我能想到的,現在是最好的。

注意,刪除用戶的,缺席的會話狀態完全是另一個問題。

+0

我們做類似的事情,以阻止多個用戶從不同的機器上登錄,我們生成令牌(基於用戶的電腦信息),爲每個登錄,然後檢查是否該令牌是一樣的,如果我們不強制signout –

相關問題