当我们点击登录并进行身份验证时,我将用户重定向到此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();
}
}
答案 0 :(得分:2)
动作过滤器仅适用于公共操作方法,而不适用于私有方法。
此外,FormsAuthentication.SetAuthCookie
方法将cookie写入HTTP响应,该响应在下一个请求之前不可用。在授权用户之前,您需要进行重定向。来自MSDN:
表单身份验证票证提供表单身份验证 信息到浏览器发出的下一个请求。
因此,在设置auth cookie后,将用户重定向到另一个具有Authorize
属性的操作,它应该可以正常工作。