2015-05-06 76 views
1

我使用ASP.Net身份來管理我的用戶。HttpContext.Current.User.Identity上AuthenticationManager.SignIn

我發現,調用以下後:

AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, identity); 

當我檢查,如果用戶通過HttpContext.Current.User.Identity.IsAuthenticated目前驗證它返回false

我設法讓這個做回true如下:

FormsAuthentication.SetAuthCookie(model.UserName, false); 

是否有可能設置HttpContext.Current.User.Identity.IsAuthenticatedtrue

+1

在什麼時候,你檢查'HttpContext.Current.User.Identity.IsAuthenticated'?如果在簽名後立即發生,這可能是錯誤的。加載另一頁後它仍然是錯誤的嗎?另外,發佈你的'web.config',以及如何配置ASP.NET Identity的詳細信息。 –

+0

嗨,我已經解決了像這樣:HttpContext.GetOwinContext()。Authentication.User.Identity' ..現在的問題是:是正確的方式? –

回答

6

你是不必要的戰鬥系統。

AuthenticationManager.SignIn需要,你可以使用的應該是相當短的當前請求的其餘部分的身份參數。

var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
Debug.WriteLine(identity.IsAuthenticated); //true 
Debug.WriteLine(this.Request.IsAuthenticated); //false 

手頭要求的目的是簡單地認證用戶。如果有的話,你不應該做太多的事情,然後返回響應/做一個重定向。

儘管您剛剛(成功)認證用戶this.Request.IsAuthenticated==false的原因是因爲該值在請求管道的初始階段(AuthenticateRequest)期間由FormsAuthenticationModule設置。

FormsAuthenticationModule將根據查找到的信息查找auth-cookie並進行身份驗證(IsAuthenticated=true)。

這一切都發生了,你打在操作之前在您的控制器,所以如果它不是認證的請求可以是短路。

所以,簡單地驗證用戶的登錄操作,因爲爲時已晚也不會改變這個值。從請求管道的角度來看,所有這些操作都會附加/重新驗證auth-cookie,auth-cookie將在下一次請求期間由auth模塊使用。

這也是我們爲什麼通常立即重定向以便在下一個請求中由auth模塊更新值的原因。