我正在努力向我正在构建的站点添加登录功能,但登录后,Request.IsAuthenticated 属性始终返回 true。我搜索了这个错误并一遍又一遍地找到相同的答案,但这些解决方案对我不起作用。
来自 AccountController::Login 操作的代码:
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>
我之前找到的两个答案与 web.config 中的表单身份验证配置相关,但我已经尝试了这两个答案,但仍然无法使其正常工作。该代码在我的开发计算机上按预期运行(即...登录后显示注销)。问题是,一旦我部署到我的产品 Web 服务器,登录成功,但不显示注销链接,只能再次登录。我已经验证用户正在登录,因为我添加了从登录操作写入日志文件的代码(就在 RedirectToAction 调用之前),所以我知道它正在调用 SetAuthCookie,但是一旦它命中后续的布局代码重定向到我的主页(主页/索引),Request.IsAuthenticated 不会返回 true,因此我总是再次获得“登录”链接。我尝试过的两件事是对表单身份验证的 web.config 进行以下更改:1)添加“requireSSL =“false”2)添加域,其中“contoso”=我的产品Web服务器托管的实际域,但是再说一遍,这些都没有解决我的问题,我已经没有想法了。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="false" domain="contoso.com" />
</authentication>
任何帮助是极大的赞赏。
嗯......经过两个月的撕扯我的头发,我终于明白了这一点。根应用程序级别的 web.config 没有“runAllManagedModulesForAllRequests=true”标志。添加该属性后,Request.IsAuthenticated 检查返回 true。
希望我的挣扎将来能帮助别人。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)