我試圖將一個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。它似乎無法在客戶端上生成。
令人難以置信!謝謝,我也是這樣。我還有其他一些cookie -B-與.ASPXAUTH cookie一起初始化。 B-cookie並沒有立即添加到HttpRequest上,因此導致了一些函數,它在那裏檢查B的存在,以調用FormsAuthentication.SignOut()和amd殺死我的.ASPXAUTH cookie。 – cnom