Asp.net mvc MVC 5:扩展授权以重定向到操作
我试图锁定已通过身份验证但在其配置文件页特定控制器/操作中未处于活动状态的用户。通过active,我的意思是授权过程需要检查数据库,以查看帐户是否仅在包含布尔数据的列中处于活动状态 这就是我尝试过的: 然而,这是进入一个循环 这个想法是: 如果已验证且处于活动状态=显示控制器/操作。 如果未验证=显示登录页表单验证 如果已验证且未激活=显示配置文件页面Asp.net mvc MVC 5:扩展授权以重定向到操作,asp.net-mvc,authorization,Asp.net Mvc,Authorization,我试图锁定已通过身份验证但在其配置文件页特定控制器/操作中未处于活动状态的用户。通过active,我的意思是授权过程需要检查数据库,以查看帐户是否仅在包含布尔数据的列中处于活动状态 这就是我尝试过的: 然而,这是进入一个循环 这个想法是: 如果已验证且处于活动状态=显示控制器/操作。 如果未验证=显示登录页表单验证 如果已验证且未激活=显示配置文件页面 public class CustomAuthorize : AuthorizeAttribute { private ISADietR
public class CustomAuthorize : AuthorizeAttribute
{
private ISADietRepository repository;
public CustomAuthorize()
{
this.repository = new SADietRepository(new SADietEntities());
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
//base.OnAuthorization(filterContext);
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
string user = filterContext.HttpContext.User.Identity.Name;
var result = repository.GetVetClinicByEmail(user);
if (!result.IsActive)
{
filterContext.Result =
new RedirectToRouteResult(
new System.Web.Routing.RouteValueDictionary{{"Controller", "SADiet"},
{"Action", "NewCustomer"},
});
}
}
else
{
filterContext.Result =
new RedirectToRouteResult(
new System.Web.Routing.RouteValueDictionary{{"Controller", "SADiet"},
{"Action", "Login"},
});
}
base.OnAuthorization(filterContext);
}
}
伙计们,我刚刚试过下面的代码。只要用户经过身份验证,它就可以工作。如果用户未经过身份验证,它将不再要求进行身份验证,而是在没有用户登录的情况下运行该操作
public class CustomAuthorize : ActionFilterAttribute
{
private ISADietRepository repository;
public CustomAuthorize()
{
this.repository = new SADietRepository(new SADietEntities());
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
string user = filterContext.HttpContext.User.Identity.Name;
var result = repository.GetVetClinicByEmail(user);
if (!result.IsActive)
{
filterContext.Result =
new RedirectToRouteResult(
new System.Web.Routing.RouteValueDictionary{{"Controller", "MyAccount"},
{"Action", "Profile"},
});
}
}
base.OnActionExecuting(filterContext);
}
}
请找到下面的链接,这将有助于解决您的问题 我发现了问题所在。 我的第二个代码是正确的。问题是我替换了属性,而不是添加新属性来装饰控制器。 我是这样做的:
[CustomAuthorize]
public class SADietController : Controller
与此相反:
[CustomAuthorize, Authorize]
public class SADietController : Controller
全部排序 当没有用户登录时,filterContext.HttpContext.User.Identity.Name应引发NullReferenceException。很抱歉,此行实际上没有用处。忘记删除ITI如果您删除了它,如何查询数据库以查看用户是否设置了标志?它仅在用户经过身份验证后使用,因此字符串user不会为空!然而,这实际上不是主要问题。我认为整个事情都错了。你知道我想要实现什么吗?嗨,杰,谢谢你的链接,但是我已经看到了你建议的至少5个链接。我是否为了实现我的需求而凌驾于正确的事情之上?你明白我需要什么吗?谢谢