Угловой 6 с сессии хранения - PullRequest
0 голосов
/ 05 апреля 2019

Я использую sessionStorage для сохранения моих пользовательских данных. если вы простаиваете некоторое время (например: 2 минуты). мне нужно истечь sessionStorage. как я истекаю это? Можете ли вы дать мне небольшое руководство.

функция входа в систему

 signin() {

this.disableSubmit = true;
return this.loginservice.loginUser(this.model).subscribe(
  data => {

         if (data) {
              this.responseuser = data.response;
            ;
              if (data.response.responseCode === 200) {

                  window.sessionStorage.setItem('token', JSON.stringify(this.responseuser));
                  window.sessionStorage.setItem('isLoggedIn', 'true');

                  }

            }


},
  error => {

  });

}

Ответы [ 3 ]

2 голосов
/ 05 апреля 2019

Вы можете установить пакет ng2-idle и реализовать свой срок действия в подписке onTimeout.

Это пример исходного кода

this.idle.onTimeout.subscribe(() => {

          this.idleState = 'Timed out!';
          this.timedOut = true;         
          this.idle.stop();
          //prevent init multiple time
          this.idle.onTimeout.observers.length = 0;
          this.idle.onIdleStart.observers.length = 0;
          this.idle.onIdleEnd.observers.length = 0;

          // add your code to expire session storage here
        });

https://hackedbychinese.github.io/ng2-idle/

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

Вы можете хранить данные с переменной «expiration time» (ваш пример: Date now + 2 min). После того, как вы прочитаете эти данные и проверьте дату.

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

Вы можете установить время истечения на сервере для токена.Если вы сделаете следующий вызов API, вы получите ошибку 401.Один из способов отловить ошибку и перенаправить ее на перехватчик:

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        const authHeader = this.getAuthorizationHeaders(req.headers);
        const authReq = req.clone({ headers: authHeader });
        return next.handle(authReq)
            .pipe(
                catchError((error) => {
                    if (error.status === 401) {
                        this.localStorageService.removeItem('auth');
                        this.router.navigate(['/login']);
                        return of({} as HttpEvent<any>);
                    }

                    return throwError(this.errorHandler.getError(error));
                })
            );
    }
...