OnRedirectToLogin не вызывается, если запрос исходит со страницы входа в системуC#

Место общения программистов C#
Anonymous
OnRedirectToLogin не вызывается, если запрос исходит со страницы входа в систему

Сообщение Anonymous »

Сценарий: я пытаюсь реализовать перенаправление входа в систему без надоедливых строк запроса.
Я использую проверку подлинности файлов cookie в C# ASP.NET и имею следующий обработчик событий:

Код: Выделить всё

options.ReturnUrlParameter = "";
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.SameSite = SameSiteMode.Strict;
options.LoginPath = "/Pin/Login";
options.Events = new CookieAuthenticationEvents()
{
OnRedirectToLogin = context =>
{
UriHelper.FromAbsolute(context.RedirectUri, out String? scheme, out HostString host, out PathString path, out QueryString query, out FragmentString fragment);
var loginRedirect = UriHelper.BuildAbsolute(scheme, host, path);

context.Response.Cookies.Delete("ReturnUrl");
context.Response.Cookies.Append("ReturnUrl", context.Request.Path.Value ?? "/");

context.Response.Redirect(loginRedirect);
return Task.CompletedTask;

}
};
Затем на странице входа у меня есть обработчик Get (

Код: Выделить всё

ReturnUrl
является частью Модели):

Код: Выделить всё

public async Task OnGetAsync()
{
if (Request.Cookies.ContainsKey("ReturnUrl"))
{
ReturnUrl = Request.Cookies["ReturnUrl"] ?? "/";
Response.Cookies.Delete("ReturnUrl");
}
return Page();
}
Это отлично работает, когда я впервые нажимаю ссылку, например /Site/PageOne, я перенаправляюсь на /Pin/Login и вижу ожидаемое значение в ReturnUrl («/Site/PageOne»).
Однако, если я нажимаю следующую ссылку, например /Site/PageTwo, перед входом в систему, Я по-прежнему возвращаюсь к /Pin/Login, но не запускаю OnRedirectToLogin, поэтому для моего ReturnUrl не устанавливается значение "/Site/PageTwo".
Как я возвращаюсь к /Pin/Login, когда я запросил /Site/PageTwo без запуска OnRedirectToLogin?

Подробнее здесь: https://stackoverflow.com/questions/798 ... login-page

Вернуться в «C#»