用户未在自定义授权属性中进行身份验证

时间:2013-07-31 16:39:00

标签: asp.net-mvc-4

我已经创建了自己的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);

}

1 个答案:

答案 0 :(得分:1)

自定义授权属性看起来是正确的。

由于您自己设置cookie,我猜您没有使用内置的成员资格提供程序。

如果您自己设置cookie,还需要读取auth cookie并在每个请求上设置Identity和Principal对象。否则,HttpContext.User.Identity.IsAuthenticated将始终为false,这似乎是您正在经历的。