Angular 6 个会话存储

Angular 6 with session Storage

我正在使用 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 => {

  });

}

您可以安装包 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/

您可以在服务器上为令牌设置过期时间。如果您进行下一个 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));
                })
            );
    }

您可以使用 var "time expiration" 存储数据(您的示例是 Date now + 2 min)。 阅读此数据并检查日期后。