Request.IsAuthenticated 总是返回 false
Request.IsAuthenticated always returning false
我正在努力为我正在构建的网站添加登录功能,但登录后,Request.IsAuthenticated 属性 总是 return 为真。我已经搜索过这个错误并一遍又一遍地找到相同的答案,但这些解决方案对我不起作用。
来自 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>
我之前找到的 2 个答案与 web.config 中的表单身份验证配置有关,但我都试过了,但仍然无法正常工作。代码在我的开发机器上按预期运行(即...登录后显示注销)。问题是一旦我部署到我的 prod web 服务器登录成功,但不显示注销 link,仅再次登录。我已经验证用户正在登录,因为我已经添加了代码以从登录操作(就在 RedirectToAction 调用之前)写入日志文件,所以我知道它正在调用 SetAuthCookie,但是一旦它在随后的布局代码中命中重定向到我的主页 (Home/Index),Request.IsAuthenticated 永远不会 return true 所以我总是再次得到 "Login" link。我尝试过的两件事是对表单验证的 web.config 进行以下更改:1) 添加 "requireSSL="false" 2) 添加域,其中 "contoso" = 我的产品网站的实际域服务器正在托管,但同样,这些都没有解决我的问题,我 运行 没有想法。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="false" domain="contoso.com" />
</authentication>
非常感谢任何帮助。
嗯....经过 2 个月的扯头发,我终于弄明白了。根应用程序级别的 web.config 没有 "runAllManagedModulesForAllRequests=true" 标志。添加该属性后,Request.IsAuthenticated 检查返回 true。
希望我的奋斗在未来能帮助到其他人。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>
我的问题与 Chrome 有关。切换到另一个浏览器立即解决了它。该问题仅在 chrome 上使用 localhost 时出现。我认为与 SSL
有关
我正在努力为我正在构建的网站添加登录功能,但登录后,Request.IsAuthenticated 属性 总是 return 为真。我已经搜索过这个错误并一遍又一遍地找到相同的答案,但这些解决方案对我不起作用。
来自 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>
我之前找到的 2 个答案与 web.config 中的表单身份验证配置有关,但我都试过了,但仍然无法正常工作。代码在我的开发机器上按预期运行(即...登录后显示注销)。问题是一旦我部署到我的 prod web 服务器登录成功,但不显示注销 link,仅再次登录。我已经验证用户正在登录,因为我已经添加了代码以从登录操作(就在 RedirectToAction 调用之前)写入日志文件,所以我知道它正在调用 SetAuthCookie,但是一旦它在随后的布局代码中命中重定向到我的主页 (Home/Index),Request.IsAuthenticated 永远不会 return true 所以我总是再次得到 "Login" link。我尝试过的两件事是对表单验证的 web.config 进行以下更改:1) 添加 "requireSSL="false" 2) 添加域,其中 "contoso" = 我的产品网站的实际域服务器正在托管,但同样,这些都没有解决我的问题,我 运行 没有想法。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" requireSSL="false" domain="contoso.com" />
</authentication>
非常感谢任何帮助。
嗯....经过 2 个月的扯头发,我终于弄明白了。根应用程序级别的 web.config 没有 "runAllManagedModulesForAllRequests=true" 标志。添加该属性后,Request.IsAuthenticated 检查返回 true。
希望我的奋斗在未来能帮助到其他人。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>
我的问题与 Chrome 有关。切换到另一个浏览器立即解决了它。该问题仅在 chrome 上使用 localhost 时出现。我认为与 SSL
有关