localalstorage не обновляется в угловой службе - PullRequest
0 голосов
/ 09 ноября 2018

Я использую угловые 6 и localStorage для сохранения токена авторизации.

код, который получает авторизацию от localStorage:

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json',
    'Authorization': 'Basic ' + JSON.parse(localStorage.getItem('userdetails')).token
  })
};

и используйте его как

getCities() {
    return this.http.get<any>('http://myservice.com/api/cities', httpOptions);
  }

когда я выхожу, я очищаю localStorage и перенаправляю на домашнюю страницу как

localStorage.clear();
  this.router.navigate(['/']);

при входе в систему я устанавливаю элемент userdetails localStorage как

this.loginService.login(obj)
            .subscribe(
                auth => {
                                               localStorage.setItem('userdetails', JSON.stringify(auth));
                    this.router.navigate(['authentication/auth/redirectpage']);

                }
            );

Мой объект аутентификации, который я сохраняю, выглядит так:

{"fullname":"Test User","username":"TestUser1","authlevel":"Q","designation":"Tester 1","token":"First_Login_Token"}

При первом входе в систему все работает нормально. Когда я выхожу из системы, элемент userdetails localStorage разрушается (если этот флажок установлен на вкладке Локальное хранилище в приложении Chrome DevTools.

Когда я перехожу с другим пользователем, мой userdetails корректно обновляется до

{"fullname":"Test User 2","username":"TestUser2","authlevel":"R","designation":"Tester 2","token":"Second_Login_Token"}

НО

localStorage.getItem('userdetails')).token в locationService возвращает только First_Login_Token.

Если я перезагружаю страницу, она правильно принимает Second_Login_Token.

Не уверен, что происходит не так.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

У меня возникла почти та же проблема, я обнаружил, что я назвал localStorage в части объявления, поэтому она стала нулевой. Сначала вы должны объявить переменную, если у вас есть localstorage, вызовите ее после конструктора. Спасибо Лакшман!

service.ts заголовок: любой

Конструктор

header = localStorage ....

0 голосов
/ 09 ноября 2018

хорошо, я нашел проблему.

const httpOptions

является виновником.

Я сделал его переменной в классе и устанавливаю его в каждом методе, например

export class LocationService {

  httpOptions: any;

  constructor(private http: HttpClient) {
  }


  getcities() {
    this.httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        'Authorization': 'Basic ' + JSON.parse(localStorage.getItem('userdetails')).token
      })
    };
    return this.http.get<any>('http://myservice.com/api/cities', this.httpOptions);
  }

.
.
.

Теперь все хорошо. спасибо в любом случае !!!

...