簡體   English   中英

注銷用戶並重定向用戶以在令牌到期時登錄 - Angular 8

[英]Logout User and Redirect User to Login on Token Expiration - Angular 8

我收到idToken並且我還得到時間戳格式的過期時間expTime例如: 1605803717基本上在 1 天內過期。 如果idToken過期,我想注銷用戶並將用戶重定向到登錄頁面。 我已經實現了一個 HTTPInterceptor 如下:

intercept(
  request: HttpRequest<any>,
  next: HttpHandler
): Observable<HttpEvent<any>> {
  this.token = JSON.parse(localStorage.getItem("getToken"));
  if (this.tokenExpired(this.token)) {
    Auth.signOut().then((res) => {
      this.authState === "signedout";
      this.router.navigate(["/login"]);
    });
  } else {
    return;
  }
}

private tokenExpired(token: number) {
  const expiry = token;
  return Math.floor(new Date().getTime() / 1000) >= expiry;
}

我的問題是要知道這個實現是否會自動工作,我的意思是,當idToken過期時,這個攔截器會自動觸發還是我需要設置某種觸發器? HTTP攔截器是如何工作的? 它是否能夠捕獲時間到期並注銷用戶,或者我必須實現其他功能來捕獲idToken到期?

我實現它的一種方法是使用代碼 401 捕獲未經授權的錯誤。在我們的例子中處理錯誤是使用 refreshToken 更新令牌,但是如果你願意,你可以注銷和重定向


intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(
      catchError((err) => {
        // Unauthorized
        if (err && err.status === 401) {
          // Logout User
          // Redirect
          // etc.
        } else {
          // This will forward other errors since 
          // this interceptor code is invoked on every http request
          return next.handle(req);
        }
      }),
    );
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM