我已经创建了自己的authorize属性,这就是它的样子
public class RedirectAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "NotExist" }));
}
}
}
因此,如果用户未经过身份验证,我希望将其重定向到NotExist
控制器。我已经调试了,似乎未经授权的用户进入了if子句,这是正确的。但我也尝试过登录用户这样做,并且他们也接受了if子句,这是错误的。
我不明白为什么会这样。这让我对我的登录是否无效而犹豫不决。这是记录用户的正确方法吗?
FormsAuthentication.SetAuthCookie(acc.username, false);
我之前从未在asp.net mvc中建立过登录系统,所以请告诉我我做错了什么。
修改
似乎默认的[授权]属性也不起作用......我真的认为问题存在于登录中:
[HttpPost]
public ActionResult Login(User acc)
{
if(ModelState.IsValid)
{
if (Validate(acc.username, acc.password))
{
FormsAuthentication.SetAuthCookie(acc.username, false);
return RedirectToAction("Index", "System");
}
}
ModelState.AddModelError("IncorrectDetails", "Wrong details. Please try again.");
return View(acc);
}
答案 0 :(得分:1)
自定义授权属性看起来是正确的。
由于您自己设置cookie,我猜您没有使用内置的成员资格提供程序。
如果您自己设置cookie,还需要读取auth cookie并在每个请求上设置Identity和Principal对象。否则,HttpContext.User.Identity.IsAuthenticated将始终为false,这似乎是您正在经历的。