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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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