Beo*_*ett 2 authentication asp.net-mvc redirect asp.net-mvc-areas
我有一个ASP.NET MVC5网站,将分为公共和管理部分.
公共端具有可选身份验证,某些视图仅限于具有相应角色的经过身份验证的用户.如果用户在未经授权或没有相应角色的情况下尝试访问公共控制器,我希望将其重定向到"公共"登录页面.
只需一个简单的属性,它就可以正常工作:
[Authorize(Roles = "Organizer")]
但是,如果用户尝试访问管理区域中的任何内容,如果他们未经过身份验证,或者经过身份验证但没有"管理员"角色,那么我希望将他们重定向到其他登录屏幕.(https:// localhost:44300 /管理员/帐户/登录而不是https:// localhost:44300 /帐户/登录).
是否有一种简单的方法可以为整个区域应用备用登录重定向?
您可以创建自定义授权属性,因此HandleUnauthorizedRequest您可以根据区域名称将未经授权的用户重定向到特定的登录页面:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
var areaName = filterContext.RouteData.DataTokens["area"];
if (areaName.Equals("Admin"))
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new {controller = "Account", action = "Login", area = "Admin"}));
}
else if(areaName.Equals("Public"))
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Account", action = "Login" }));
}
// other conditions...
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我们使用此代码获取当前区域名称:
var areaName = filterContext.RouteData.DataTokens["area"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5466 次 |
| 最近记录: |