Asp.net mvc 4 用户号为';t在自定义授权属性中进行身份验证

Asp.net mvc 4 用户号为';t在自定义授权属性中进行身份验证,asp.net-mvc-4,Asp.net Mvc 4,我已经创建了自己的authorize属性,这就是它的外观 public class RedirectAuthorize : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { if (!filterContext.HttpContext.User.Identity.IsAuthenticated)

我已经创建了自己的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中使用过登录系统,所以请告诉我我做错了什么

编辑:

似乎默认的[Authorized]属性也不起作用。。。我真的认为问题在于登录:

[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);

}

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

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


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

我还有一个问题:当你被授权的时候,你应该进入HandleUnauthorizedRequest()吗?非常感谢,老兄。对于自制的CMS系统,您会推荐什么方法?我只有一个用户。我认为内置成员资格?最安全的方法是使用一个内置成员资格提供程序,如SQLMembership提供程序或新的SimpleMembership(),我也可以使用SimpleMembership for razor吗?在本教程中,他们使用aspxdefinite。提供者不处理视图。您可以使用任何您喜欢的视图。