Я сделал страницу бритвы для выхода пользователей из системы. Когда аутентифицированный пользователь посещает маршрут /account/logout
, я хочу показать ему страницу с сообщением об успехе, если пользователь анонимен, то страница не авторизована. Однако эта страница успеха не должна быть доступна путем прямого ввода URL-адреса.
Следующий код работает хорошо, за исключением того, что любой может перейти на /account/logout/success
, который действует как обычная страница (и, поскольку он не отвечает за выход, это может сбивать с толку).
public class LogoutModel : CustomPageModel
{
private readonly SignInManager _signInManager;
public LogoutModel(SignInManager signInManager) => _signInManager = signInManager;
public async Task<IActionResult> OnGetAsync()
{
if (_signInManager.IsSignedIn(User))
{
await _signInManager.SignOutAsync();
return RedirectToPage("Logout", "Success");
}
return Unauthorized();
}
public void OnGetSuccess()
{
}
}
Как предотвратить прямой доступ к обработчику OnGetSuccess?
SignOutAsync()
. 27.04.2019return Page()
для отображения содержимого страницы выхода из системы, содержащей сообщение об успешном завершении. Это решило бы проблему, но представило бы другую проблему, когда пользователю предоставляется контент, как если бы он все еще был аутентифицирован (хотя он уже не прошел), пока он не обновит страницу. 27.04.2019