[英]ASP.NET Core redirect to login page without return url
我有一个 Razor 页面 (.NET 6) 项目和 ASP.NET Core Identity,在启动时我设置了访问路径和拒绝访问路径,如下所示:
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = Constants.Cookies.Authentication;
options.LoginPath = Constants.Pages.Login; // /Account/Login
options.AccessDeniedPath = Constants.Pages.Login;
options.SlidingExpiration = true;
options.Cookie.HttpOnly = true;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.SameSite = SameSiteMode.None;
options.ExpireTimeSpan = TimeSpan.FromHours(1);
});
我在登录页面上的 OnGet 方法接受返回 URL,如下所示:
public async Task<IActionResult> OnGet(string returnUrl)
{
// Some action when returnUrl is from external client
}
问题是当用户在个人资料页面上时:
// Profile page
[Authorize]
public class HomeModel : PageModel
{
//....
}
并且 cookie 已过期,当页面刷新时,用户被正确重定向到登录页面以重新登录,但返回 url 并填充配置文件页面值:
https://localhost:5002/Account/Login?ReturnUrl=%2FProfile%2FHome%3Fculture%3Den
相反,它应该是 null 或为空。
这是怎么发生的,有没有办法在查询字符串中没有这个参数的情况下进行重定向,或者我应该检查登录的获取,它是本地 url 以避免我执行的一些步骤?
谢谢
有没有办法在查询字符串中没有这个参数的情况下进行重定向
您是说删除?ReturnUrl=%2FProfile%2FHome%3Fculture%3Den
吗?
如果是这样,我建议您创建一个自定义身份验证 cookie:
public class CookieAuthEvents : CookieAuthenticationEvents
{
public override Task RedirectToLogin(RedirectContext<CookieAuthenticationOptions> context)
{
context.RedirectUri = "/Account/Login";
return base.RedirectToLogin(context);
}
public override Task RedirectToLogout(RedirectContext<CookieAuthenticationOptions> context)
{
context.RedirectUri = "/Account/CustomLogout";
return base.RedirectToLogout(context);
}
public override Task RedirectToAccessDenied(RedirectContext<CookieAuthenticationOptions> context)
{
context.RedirectUri = "/Account/CustomAccessDenied";
return base.RedirectToAccessDenied(context);
}
public override Task RedirectToReturnUrl(RedirectContext<CookieAuthenticationOptions> context)
{
context.RedirectUri = "/CustomReturnUrl";
return base.RedirectToReturnUrl(context);
}
}
在程序中,注册身份验证cookie
builder.Services.AddScoped<CookieAuthEvents>();
builder.Services.ConfigureApplicationCookie(ops =>
{
//do your stuff...
ops.EventsType = typeof(CookieAuthEvents);//add this line
});
结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.