사용자 로그 아웃 및 토큰 만료시 로그인하도록 사용자 리디렉션-Angular 8
Nov 18 2020
나는 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
가 만료되면 자동으로 트리거됩니까 아니면 일종의 트리거를 설정해야합니까? HTTPInterceptors는 어떻게 작동합니까? 시간 만료를 포착하고 사용자를 로그 아웃 할 수 idToken
있습니까 아니면 만료 를 포착하기 위해 다른 것을 구현해야 합니까?
답변
ErayIsmailov Nov 18 2020 at 17:44
내가 구현 한 한 가지 방법은 코드 401로 Unauthorized 오류를 포착하는 것입니다. 그리고 우리의 경우에 의해 오류를 처리하는 것은 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);
}
}),
);
}