gpt4 book ai didi

asp.net-mvc - 在 Identity 2.0 中重定向未经授权的用户

转载 作者:行者123 更新时间:2023-12-02 04:29:37 24 4
gpt4 key购买 nike

对于我的 mvc5 项目,我已经实现了默认标识,但根据要求进行了更改。现在我想将未经授权的用户重定向到我创建的 View 。我创建了一个自定义授权过滤器。当未经授权的用户进入时,它会出现在我的错误 View 中。我可以通过 URL 识别它。但问题是它没有在 View 中显示内容。相反,它显示 HTTP 404 错误。我已将我的代码放在下面。我知道这个问题已经在这里被问过好几次了。但我仍然无法解决它。感谢所有帮助。提前致谢!

public class CustomAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
}
}
}

错误 Controller

public class ErrorController : Controller
{
// GET: Error
public ActionResult Index()
{
return View();
}

public ActionResult AccessDenied()
{
return View();
}
}

拒绝访问 View

<h2>AccessDenied</h2>

Access Denied

在特定 Controller 上

[CustomAuthorize(Roles = "Admin")]
public class ProductTypeController : Controller
{
}

我收到错误

HTTP 404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下 URL 并确保拼写正确。

更新的问题

现在我想将未经授权的用户重定向到 ErrorView,将未经身份验证的用户重定向到登录页面。我已将修改后的 CustomAuthorise 放在下面。但这不起作用。请指导我..

public class CustomAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (!httpContext.Request.IsAuthenticated)
return false;
else
return true;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
}
}

最佳答案

要重定向未经授权的用户,您无需自定义 AuthorizeAttribute。只需在 Startup.ConfigureAuth(IAppBuilder app) 方法或您的自定义 OWIN 启动方法中添加以下行:

public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Error/AccessDenied"),
});
}

但是如果您想区分未经身份验证的用户和未经授权的用户。像这样编写您的自定义过滤器:

public class MyAuthAttribute: AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if(filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("/Error/AccessDenied");
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}

然后您可以在OWIN启动方法中添加登录url:

LoginPath = new PathString("/Account/Login")

关于asp.net-mvc - 在 Identity 2.0 中重定向未经授权的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32345085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com