我在使用“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)?
答案 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之后,您需要重定向回到您希望用户前往的任何操作。