[授权]中的HttpContext.User.Identity.Name为空

时间:2013-05-03 12:53:45

标签: c# asp.net-mvc asp.net-mvc-4

当我们点击登录并进行身份验证时,我将用户重定向到此ActionResult。它带来了这种方法:

[Authorize]
private ActionResult RouteRegistrationStep()
{
    Debug.Print(HttpContext.User.Identity.IsAuthenticated.ToString()); // false
    Debug.Print(HttpContext.User.Identity.Name); // blank
    return RedirectToAction("ContactInfo", "Adjuster");
}

HttpContext.User.Identity.IsAuthenticated.ToString()如何错误?并且,如果它是错误的,为什么[Authorize]属性让它在方法中开始?

修改

这是将它们重定向到RouteRegistrationStep()的登录方法:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid && db.Users.Where(x => x.username == model.username 
        && x.password == EncryptPassword(model.password)).Count() > 0)
    {
        FormsAuthentication.SetAuthCookie(model.username, model.RememberMe);
        return RedirectToLocal(returnUrl);
    }

    // If we got this far, something failed, redisplay form
    ModelState.AddModelError("", "The user name or password provided is incorrect.");
    return View(model);
}

[Authorize]
private ActionResult RedirectToLocal(string returnUrl)
{
    if (Url.IsLocalUrl(returnUrl))
    {
        return Redirect(returnUrl);
    }
    else
    {
        return RouteRegistrationStep();
    }
}

1 个答案:

答案 0 :(得分:2)

动作过滤器仅适用于公共操作方法,而不适用于私有方法。

此外,FormsAuthentication.SetAuthCookie方法将cookie写入HTTP响应,该响应在下一个请求之前不可用。在授权用户之前,您需要进行重定向。来自MSDN

  

表单身份验证票证提供表单身份验证   信息到浏览器发出的下一个请求。

因此,在设置auth cookie后,将用户重定向到另一个具有Authorize属性的操作,它应该可以正常工作。