即使在成功进行表单身份验证和setauthcookie之后,User.Identity.IsAuthenticated也是false

时间:2016-05-26 05:57:16

标签: asp.net-mvc razor asp.net-mvc-5 forms-authentication wif

我有两个控制器TokkenIssuer和Login。 我在TokkenIssuer中使用了[authorize]方法A,它将登录控制器的视图,然后登录到控制器的登录操作。

登录控制器:

public ActionResult Login(string user,string password,string returnUrl)
    {
        FormsAuthentication.SetAuthCookie(user, true);
        if (FormsAuthentication.Authenticate(user, password))
        {

            if (string.IsNullOrEmpty(returnUrl) && Request.UrlReferrer != null)
                returnUrl = Server.UrlEncode(Request.UrlReferrer.PathAndQuery);

            return RedirectToAction("B", "TokenIssuer");
        }
        return View();
    }

从登录我在Tokenissuer Controller中重定向到动作B. 我开始知道User.Identity.IsAuthenticated在重定向到另一个控制器后会变为true但我无法获取User对象,也没有在我的重定向控制器(TokenIssuer)中找到User.Identity.IsAuthenticated为true。

TokenIssuer控制器

[Authorize]
    public ActionResult A()            //takes to Login view
    {
     return View();       
    }
    public ActionResult B()           //Redirected from Login controller
    {
       if(User.Identity.IsAuthenticated)                  // Getting False
        {
           string user = User.Identity.Name;
        }
    }

如何解决此问题?

2 个答案:

答案 0 :(得分:0)

在下一个请求之前为假。

以下是一个很好的解释:http://forums.asp.net/t/1177741.aspx

简而言之,在执行所请求的ASP.NET页面的代码之前,很早就在ASP.NET管道中设置了User对象。现在,在随后的访问中,ASP.NET运行时将看到表单身份验证票,而User.Identity.IsAuthenticated将为true,但在此请求中不会。

参考:https://www.experts-exchange.com/questions/28063988/User-Identity-IsAuthenticated-is-false-after-a-successful-Login-Validation.html

答案 1 :(得分:-1)

花了很多时间才找到问题。

我知道,在VS 2013或更高版本中,默认情况下我们创建Web应用程序时会在web.config文件中添加以下代码,该文件会禁用基于表单/声明的身份验证以创建用户对象。

<module>
    <remove name = "FormsAuthentication"/>
</module>

所以评论或删除。这对我有帮助。