Request.IsAuthenticated总是返回false

时间:2015-05-07 03:43:12

标签: asp.net asp.net-mvc forms-authentication

我正在为我正在构建的网站添加登录功能,但在登录后,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>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

嗯......经过2个月的折磨我的头发后,我终于弄明白了。根应用程序级别的web.config没有“runAllManagedModulesForAllRequests = true”标志。添加该属性后,Request.IsAuthenticated检查返回true。

希望将来我的挣扎帮助别人。

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>

答案 1 :(得分:2)

我的问题与Chrome有关。切换到另一个浏览器会立即解决它。仅在chrome上使用localhost时才会出现此问题。我认为与SSL有关