![](/img/trans.png)
[英]How to use multiple login pages in .ASP.NET Core MVC and unauthorized user redirect different login page
[英]How to redirect to login page from AuthorizationFilter in asp net core?
當我返回ForbidResult()
它會重定向到啟動時指定的AccessDenied
頁面。 我想對UnauthorizedResult()
做同樣的事情,但重定向到“ Login
頁面。
PS我在控制器中沒有使用標准的Authorize
屬性,但我有自己的屬性。
授權過濾器 :
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";
});
您可以使用RedirectResult或context.Response.Redirect(“ / Accounts / Login”);進行測試。
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 RedirectResult("/Accounts/Login");
}
}
}
用於重定向到options.LoginPath = "/Accounts/Login";
配置的登錄頁面options.LoginPath = "/Accounts/Login";
,您可以嘗試以下代碼:
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);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.