LogoutPath
, который вы можете настроить с помощью схемы аутентификации cookie, является нечетным.В то время как LoginPath
имеет прямое влияние и в основном является URL-адресом, на который перенаправляется конечный пользователь при вызове проверки подлинности cookie, LogoutPath
не используется напрямую.
Вместо этого настроенный LogoutPath
используется только для проверки текущего URL-адреса, когда происходит выход из системы со схемой проверки подлинности cookie.Проверка выглядит следующим образом :
// Only redirect on the logout path
var shouldRedirect = Options.LogoutPath.HasValue && OriginalPath == Options.LogoutPath;
await ApplyHeaders(shouldRedirect, context.Properties);
Таким образом, это в основном проверяет, равен ли OriginalPath
, который является текущим путем запроса, настроенному пути выхода из системы.В этом случае вызов ApplyHeaders
выполнит перенаправление на RedirectUri
свойств аутентификации.
Цель этого состоит в том, чтобы убедиться, что перенаправление на путь может произойти только тогда, когдареальный URL выхода из системы доступен.Например, если пользователь нажимает кнопку выхода из системы, он может выйти из системы, а затем перенаправиться обратно туда, откуда он пришел.Но если они вышли из системы в другом месте, то они не будут перенаправлены обратно автоматически, поскольку только URL-адрес выхода считается безопасным местом для перенаправления пользователя обратно.
Та же логика существует и для LoginPath
, кстати.но есть дополнительная логика, что схема проверки подлинности cookie также перенаправляет на этот URL при вызове схемы (например, когда требуется проверка подлинности через фильтр авторизации).
DoМне нужно создать соответствующее действие GET в моем AccountController
и View для этого?Или будет работать действие POST?
Это зависит от вас и от того, как вы хотите справиться с выходом из системы.Для запуска вышеуказанной логики вам просто нужно любое действие на этом маршруте, поэтому вы также можете выполнить POST, чтобы потребовать от пользователей выполнения отправки формы для их выхода (чтобы предотвратить случайный выход черезGET запросы).
Требуется ли в моем действии Выход из системы пользователя выйти из системы или он уже был завершен к этому моменту?
Вам нужно будет позвонитьSignOutAsync
самостоятельно, поскольку не существует неявной обработки этих маршрутов.Точно так же, как вам нужно реализовать свою собственную логику входа в систему на LoginPath
, вам также необходимо реализовать логику выхода из системы.
Сконфигурированные пути действительно предназначены для схемы cookie, чтобы знать где эти маршруты есть, но они не влияют на их поведение.