2011-04-26 52 views
1

我有一個MVC應用程序使用身份驗證服務,使用IsAuthenticated()方法返回true/false。爲什麼Identity.IsAuthenticated()有時真實有時是錯誤的

它似乎沒有連接到FormsAuthentication.SignOut()方法或當我登錄時添加一個新的授權cookie。

登陸:

HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket))); 

登出:

FormsAuthentication.SignOut(); 

我有一個自定義授權我的控制器,它要求具有IsAuthenticated(),但它返回錯誤值的身份驗證服務的屬性。

有誰知道爲什麼下面的代碼有時會返回true或false?

userPrincipal.Identity.IsAuthenticated 

回答

0

(從上面評論複製)

我的身份驗證服務具有由StructureMap啓動期間噴射上的IPrincipal的依賴性。但是,在那一點上它將是未經驗證的。我需要在當前線程中使用IPrincipal。這是傳遞到我的CustomAuthorise類(從繼承AuthorizeAttribute)上調用的AuthorizeCore()

2

IsAuthenticated總是返回false,如果你從非安全的網頁調用它,並且已經設置requireSSL上的web配置=「真」,因爲無法讀取認證的cookie。

在其他情況下,如果用戶已通過身份驗證,則返回true,否則返回false。設置一個像這樣的斷言來檢查你是否從安全頁面提問。

Debug.Assert(HttpContext.Current.Request.IsSecureConnection, "oops, the IsAuthenticated is not working here"); 

if (HttpContext.Current.User.Identity.IsAuthenticated) 
{ 

} 
+0

嗨,我沒有SSL設置。當它從我的自定義授權屬性AuthorizeCore()上的服務調用時,IsAuthenticated返回false。 – jaffa 2011-04-26 12:52:00

+0

@Jon然後可能無法讀取cookie和會話。您是否已經設置了服務來讀取寫入cookie和會話數據? – Aristos 2011-04-26 13:31:44

+1

我想我可能已經意識到了這個問題。我的認證服務依賴於IPrincipal,它由StructureMap在啓動過程中注入。但是,在那一點上它將是未經驗證的。我需要在當前線程中使用IPrincipal。這傳遞給我的CustomAuthorise類(從AuthorizeAttribute繼承)上調用的AuthorizeCore()。 – jaffa 2011-04-27 09:41:57

相關問題