Я начал с отслеживания состояния входа в систему с помощью флага isLoggedIn
в службе аутентификации, которую я написал, и он установлен на true
, когда пользователь успешно проходит аутентификацию на сервере с Identity.
Теперь я хочу, чтобы они вошли в систему, чтобы им не всегда приходилось входить при обновлении страницы. Я добавил эту функцию в службу аутентификации:
testLogin() : Observable<boolean> {
return this.httpClient.post("/api/Account/TestLogin", null, { observe: "response" })
.map(result => {
if (result.ok) {
this.isLoggedIn = true;
}
return this.isLoggedIn;
});
}
И это для моего бэкэнда (контроллер находится за атрибутом [Authorize]
):
[HttpPost("[action]")]
public IActionResult TestLogin()
{
return Ok();
}
Я проверяю это при запуске моего приложения, в app.component.ts
:
constructor(private authService: AuthenticationService) {
authService.testLogin().subscribe(result => {});
}
Проблема в том, что мой охранник маршрута canActivate
возвращает true
, если флаг isLoggedIn
имеет значение true, в противном случае перенаправляется на страницу входа и возвращает false
. Это происходит до того, как запрос функции testLogin
завершен, поэтому меня перенаправляют на вход в систему, несмотря на то, что я успешно прошел проверку подлинности, я могу перемещаться по странице со страницы входа в систему без входа в систему. Это неправильный способ сделать это? Я просто использую стандартную настройку ASP.NET Core Identity с файлами cookie, но большинство руководств, которые я нашел по этому вопросу, используют JWT, который я не использую.