как получить set-cookie из запроса заголовка HTTP и отправить его в другом API angular

#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, не так ли? Я сталкивался с подобными проблемами в прошлом, но мне не требовалось вносить какие-либо изменения в мой код. Мне пришлось внести некоторые изменения, зависящие от среды.

Я не знаю точной среды, с которой вы работаете, но следующие пункты могут помочь вам в поиске решения:

  1. Вызов REST API для входа в систему и последующий вызов REST API, если они выполняются на один и тот же сервер / URL-домен, файлы cookie должны автоматически отправляться вместе с вашим запросом в последующих запросах вашим браузером.
  2. Проверьте вкладку «Заголовки» вашего ответа из ответа login REST API. Имеет ли запись set-cookie атрибут с именем «HttpOnly»? Если это так, я сомневаюсь, что файл cookie будет доступен из кода javascript.
  3. Если применим пункт № 2, работает ли ваше приложение Angular на HTTP, а ваш REST API — на HTTPS? Если это так, если ваше приложение Angular не работает по протоколу HTTPS, ваш браузер не будет отправлять обратно полученный файл cookie в последующих запросах. В этом случае вам может потребоваться использовать самозаверяющий сертификат для запуска вашего приложения Angular по протоколу HTTPS на localhost для тестирования.

Кроме того, я бы посоветовал вам протестировать ваши текущие настройки при запуске приложения Angular и проверить, наблюдается ли такое же поведение.