#angular #api #setcookie
#angular #API #setcookie
Вопрос:
В моем проекте angular у меня есть базовая страница входа, где пользователь вводит свой адрес электронной почты и пароль, и при отправке я отправляю электронное письмо и пароль на сервер и получаю ответ, содержащий setcookie, который я должен использовать на следующей странице, которая является двухфакторной аутентификацией. Я хочу использовать этот cookie в другом вызове API (для двухфакторной аутентификации), но я не знаю как.
Это мой userLogin
вызов API:
userLogin(formdata: Login ): Observable<any> {
return this.http.post
(this.ServerUrl 'Account/login', formdata, { headers: new HttpHeaders({'accept': 'text/plain',
'Content-Type': 'application/json',
'Authorization': 'Bearer ' this.token,
}), observe: 'response' , withCredentials: true });
}
И это файлы cookie ответа, которые я получаю с сервера:
Файлы cookie
И это мой user2fa
вызов API:
user2Fa(formdata: Factor ): Observable<any> {
return this.http.post
(this.ServerUrl 'Account/twoFactorLogin', formdata, { headers: new HttpHeaders({'accept': 'text/plain',
'Content-Type': 'application/json',
'Authorization': 'Bearer ' this.token,
}), observe: 'response' , withCredentials: true });
}
Ответ №1:
Вы не можете получить доступ к cookie из своего кода Angular, не так ли? Я сталкивался с подобными проблемами в прошлом, но мне не требовалось вносить какие-либо изменения в мой код. Мне пришлось внести некоторые изменения, зависящие от среды.
Я не знаю точной среды, с которой вы работаете, но следующие пункты могут помочь вам в поиске решения:
- Вызов REST API для входа в систему и последующий вызов REST API, если они выполняются на один и тот же сервер / URL-домен, файлы cookie должны автоматически отправляться вместе с вашим запросом в последующих запросах вашим браузером.
- Проверьте вкладку «Заголовки» вашего ответа из ответа login REST API. Имеет ли запись set-cookie атрибут с именем «HttpOnly»? Если это так, я сомневаюсь, что файл cookie будет доступен из кода javascript.
- Если применим пункт № 2, работает ли ваше приложение Angular на HTTP, а ваш REST API — на HTTPS? Если это так, если ваше приложение Angular не работает по протоколу HTTPS, ваш браузер не будет отправлять обратно полученный файл cookie в последующих запросах. В этом случае вам может потребоваться использовать самозаверяющий сертификат для запуска вашего приложения Angular по протоколу HTTPS на localhost для тестирования.
Кроме того, я бы посоветовал вам протестировать ваши текущие настройки при запуске приложения Angular и проверить, наблюдается ли такое же поведение.