我正在为我正在构建的网站添加登录功能,但在登录后,Request.IsAuthenticated属性始终返回true。我已经搜索了这个错误并且一遍又一遍地找到相同的答案,但这些解决方案并不适用于我。
来自AccountController的代码::登录操作:
if (response.Status == KD.Core.Enumerations.LoginStatus.LoggedIn)
{
FormsAuthentication.SetAuthCookie(model.Username, model.RememberMe);
SessionMgr.GetInstance().SetSessionValue(SessionTypes.UserId, response.UserId);
//Have added logging here to ensure login is successful in prod.
return RedirectToAction("Index", "Home");
}
我在_Layout视图文件中看到问题的代码:
<ul class="profile-nav">
@if (Request.IsAuthenticated)
{
<li class="active"><a href="/Account/Logout" title="Logout">Logout</a></li>
}
else
{
<li class="active"><a href="/Account/Login" title="Login">Login</a></li>
}
</ul>
我之前发现的2个答案与web.config中的表单身份验证配置有关,但我已经尝试了两个,但我仍然无法使其工作。代码在我的开发机器上按预期运行(即...登录后显示Logout)。问题是,一旦我部署到我的prod web服务器登录成功,但是没有显示Logout链接,只能再次登录。我已经验证用户正在登录,因为我已添加代码以从Login操作(在RedirectToAction调用之前)写入日志文件,因此我知道它正在调用SetAuthCookie,但是一旦它在后续命中布局代码重定向到我的主页(主页/索引),Request.IsAuthenticated永远不会返回true,所以我总是再次获得“登录”链接。我尝试的两件事是web.config for forms auth的以下更改:1)添加“requireSSL =”false“2)添加域”contoso“=我的prod web服务器托管的实际域,但是再次,这些都没有解决我的问题,我的想法已经用完了。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="false" domain="contoso.com" />
</authentication>
非常感谢任何帮助。
答案 0 :(得分:3)
嗯......经过2个月的折磨我的头发后,我终于弄明白了。根应用程序级别的web.config没有“runAllManagedModulesForAllRequests = true”标志。添加该属性后,Request.IsAuthenticated检查返回true。
希望将来我的挣扎帮助别人。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>
答案 1 :(得分:2)
我的问题与Chrome有关。切换到另一个浏览器会立即解决它。仅在chrome上使用localhost时才会出现此问题。我认为与SSL有关