Как сделать статус входа постоянным в Angular 2/3/4/5

В настоящее время я использую токен (также известный как идентификатор сеанса) в моем приложении Angular 5, где я передаю его в серверную часть в заголовке запроса, подобном этому;

const headersForJSON: HttpHeaders = new HttpHeaders (
  {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
);

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

this.headers = headersForJSON.set("Authorization", v.authtoken);

Это отлично работает, если пользователь не перезагрузит приложение или не изменит URL-адрес в браузере вручную. Также, если пользователь щелкает правой кнопкой мыши ссылку маршрутизатора, чтобы открыть другое окно / вкладку в приложении.

В этих случаях среда Angular SPA теряется, а переменная authtoken не определена, поэтому нечего отправлять на серверную часть.

Есть ли стандартная практика для исправления этого?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
0
2 519
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Стандартная практика - сохранять токен в локальном хранилище и повторно использовать его при необходимости.

При входе пользователя в систему сохраните токен в localstorage, а при выходе пользователя из системы удалите токен из localstorage.

Код

Сохраните в localstorage после входа в систему:

localStorage.setItem('token', Your_token);

Установка заголовка при запросе данных на сервере:

getHeader(){
  let token = localstorage.getItem('token')? localstorage.getItem('token') : null;
  return new HttpHeaders (
    {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      'token': token
    }
  );
}

Удалить токен при выходе пользователя из системы:

localStorage.removeItem('token');

Для менее опытных людей было бы полезно, если бы вы могли предоставить ссылки, показывающие, как это сделать (например, отличное сообщение в блоге, библиотека Angular), или предоставить некоторый код, который показывает высокий уровень того, что нужно делать.

Daniel W Strimpel 23.04.2018 19:47

Спасибо за указатель, который помог мне найти решение. Для Angular 5 я использовал npm package simple-ng5-storage, который хорошо справляется с хранением и извлечением объектов в локальное / сессионное хранилище.

AlanObject 24.04.2018 18:28

Другие вопросы по теме