2016-06-15 67 views
3

我試圖將一個MVC5 web應用程序移植到Linux MonoDevelop。Mono MVC5 User.Identity.IsAuthenticated在用FormsAuthentication.SetAuthCookie()登錄後返回false

該網站正在使用FormsAuthenication,所以登錄操作我調用SetAuthCookie()和我的控制器上的AuthorizeAttribute,以確保只有登錄用戶才能訪問該功能。

這一切在Windows上運行良好!

在移植到Mono並使用MonoDevelop進行調試後,我發現它無法正常工作。實際上,登錄成功後,用戶將被重定向到登錄頁面。

我嘗試從HomeController中刪除[Authorize]屬性,只是爲了檢查發生了什麼,並且我意識到 - 當在HomeController操作中時,User.Identity.IsAuthenticated返回false。我想這就是爲什麼我重定向到登錄。

但是,爲什麼User.Identity.IsAuthenticated返回false呢?

我檢查到Windows上的SetAuthCookie()在http上下文中創建一個.ASPXAUTH cookie。在Linux上,它會在http上下文中創建一個.MONOAUTH cookie。 我試着在web.config中配置cookie名稱:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" name=".ASPXAUTH" /> 
</authentication> 

但這並沒有工作...

UPDATE 我意識到,單聲道,在SetAuthCookie()運行succesfuly但cookie不存在(通過使用Firefox cookie管理)。然而,在調試時,Response.Cookies Collection合併了.ASPXAUTH cookie。它似乎無法在客戶端上生成。

回答

2

檢查代碼中的任何位置是否調用了FormsAuthentication.SignOut()。

我在單聲道有一個類似的問題,這是由於Cookie生命週期的不同導致不必要的調用FormsAuthentication.SignOut()並在實際創建之前銷燬.ASPXAUTH cookie。

+0

令人難以置信!謝謝,我也是這樣。我還有其他一些cookie -B-與.ASPXAUTH cookie一起初始化。 B-cookie並沒有立即添加到HttpRequest上,因此導致了一些函數,它在那裏檢查B的存在,以調用FormsAuthentication.SignOut()和amd殺死我的.ASPXAUTH cookie。 – cnom

相關問題