2015-04-20 59 views
1

我對使用「User.Identity」和「FormsAuthentication.SetAuthCookie」的身份驗證存在一些理解錯誤。身份驗證中的一些誤解

我有這樣的動作:

public ActionResult Login(string userName, string password) 
{ 
    if (Membership.ValidateUser(userName, password)) 
    { 
     FormsAuthentication.SetAuthCookie(userName, true); 
     var isAuth = User.Identity.IsAuthenticated; 
     return View("Desktop"); 
    } 
    return View("Login"); 
} 

我的問題是,爲什麼在我使用該行(User.Identity.IsAuthenticated)設置身份驗證票證的isAuth變量假的價值?

回答

2

通過調用FormsAuthentication.SetAuthCookie您只需將身份驗證cookie轉儲到HTTP響應。在此階段,請求仍被視爲「未通過身份驗證」。

只有以下請求(包括身份驗證cookie)將被視爲「已驗證」,並且User屬性將設置爲適當的值。

如果您希望您的HTTP請求立即擁有(剛認證的)用戶設置。試試這個:

var user = new GenericPrincipal(new GenericIdentity(userName), null); 
HttpContext.Current.User = Thread.CurrentPrincipal = currentUser; 
1

MVC使用標準的ASP.Net管道。管道的一部分是對用戶進行身份驗證。如果用戶在管道驗證爲匿名後登錄,則重新運行該進程的唯一方法是重定向用戶,以便管道可以驗證用戶。在你的場景中,在你設置好cookie之後,你需要做一個重定向回你希望用戶去的任何操作。