在身份验证方面存在一些误解

时间:2015-04-20 14:17:03

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

我在使用“User.Identity”和“FormsAuthentication.SetAuthCookie”进行身份验证时对此有所了解。

我有这个动作:

public ActionResult Login(string userName, string password)
{
    if (Membership.ValidateUser(userName, password))
    {
        FormsAuthentication.SetAuthCookie(userName, true);
         var isAuth = User.Identity.IsAuthenticated;
        return View("Desktop");
    }
    return View("Login");
}

我的问题是,在使用此行设置身份验证票证后, isAuth 变量的值为false(User.Identity.IsAuthenticated)?

2 个答案:

答案 0 :(得分:2)

通过调用FormsAuthentication.SetAuthCookie,您只需将身份验证Cookie转储到HTTP响应即可。在此阶段,请求仍被视为未经过身份验证的'。

只有以下请求(包括身份验证Cookie)才会被视为经过身份验证的'并将User属性设置为适当的值。

如果您希望HTTP请求立即拥有(仅经过身份验证的)用户设置。试试这个:

var user = new GenericPrincipal(new GenericIdentity(userName), null);
HttpContext.Current.User = Thread.CurrentPrincipal = currentUser;

答案 1 :(得分:1)

MVC使用标准的ASP.Net管道。管道的一部分是验证用户。如果用户在管道已经过匿名身份验证后登录,则重新运行该过程的唯一方法是重定向用户,以便管道可以对用户进行身份验证。在您的方案中,在设置cookie之后,您需要重定向回到您希望用户前往的任何操作。