本文介绍了如何从ASP NET Core中的AuthorizationFilter重定向到登录页面?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我返回 ForbidResult()
时,它会重定向到启动时指定的 AccessDenied
页面.我想对 UnauthorizedResult()
做同样的事情,但是重定向到 Login
页面.
When I return ForbidResult()
it redirects to AccessDenied
page as specified in startup. I want to do same with UnauthorizedResult()
but redirect to Login
page.
PS .我没有在我有自己的控制器中使用标准的 Authorize
属性.
P.S. I'm not using standard Authorize
attribute in controller I have my own.
授权过滤器:
public class MyFilter : IAuthorizationFilter
{
//
public MyFilter()
{
//
}
public void OnAuthorization(AuthorizationFilterContext context)
{
if (context.HttpContext.User.Identity.IsAuthenticated)
{
var hasPermission= ... ;
if (!hasPermission)
{
context.Result = new ForbidResult();
}
}
else
{
context.Result = new UnauthorizedResult();
}
}
}
启动:
services.AddAuthentication.AddCookie(options =>
{
options.LoginPath = "/Accounts/Login";
options.LogoutPath = "/Accounts/Logout";
options.AccessDeniedPath = "/Accounts/AccessDenied";
});
推荐答案
要重定向到在 options.LoginPath ="/Accounts/Login";
中配置的登录页面,您可以尝试以下代码:
For redirecting to login page which is configured in options.LoginPath = "/Accounts/Login";
, you could try code below:
public class MyFilter : IAuthorizationFilter
{
//
public MyFilter()
{
//
}
public void OnAuthorization(AuthorizationFilterContext context)
{
if (context.HttpContext.User.Identity.IsAuthenticated)
{
var hasPermission= ... ;
if (!hasPermission)
{
context.Result = new ForbidResult();
}
}
else
{
context.Result = new ChallengeResult(CookieAuthenticationDefaults.AuthenticationScheme);
}
}
}
这篇关于如何从ASP NET Core中的AuthorizationFilter重定向到登录页面?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!