Я использую банку активации и сервер Node с JWT. Маршрутизация при нормальной работе работает хорошо. Однако, когда срок действия токена истек, а страница все еще существует в браузере, я могу щелкнуть в приложении angular, хотя данных API не существует. Я несколько раз проходил настройку, и она выглядит правильно, но по какой-то причине он не перенаправляет вход в систему, когда токен не существует или истек срок его действия.
---- - AUTH GUARD SERVICE
import { Injectable } from "@angular/core";
import { CanActivate } from "@angular/router";
import { AuthService } from "../auth/auth.service";
import { UserService } from "../user.service";
@Injectable({ providedIn: "root" })
export class AuthGuardService implements CanActivate {
constructor(public userService: UserService, public auth: AuthService) {}
canActivate(): boolean {
if (!this.auth.isAuthenticated()) {
this.userService.logout();
return false;
}
return true;
}
}
----- AUTH SERVICE
import { Injectable } from "@angular/core";
import * as jwt_decode from "jwt-decode";
import { UserService } from "../user.service";
import { Router } from "@angular/router";
@Injectable({ providedIn: "root" })
export class AuthService {
constructor(public userService: UserService, private _router: Router) {}
///// Method to check if user is authenticated (normal employees / non-admin)
public isAuthenticated(): boolean {
// Get token from localstorage
const token = localStorage.getItem("token");
// Check to see if token exists, if not return false
if (!token) {
return false;
}
// Decode token and get expiration date
const decoded = jwt_decode(token);
const date = decoded.exp;
// check if expiration is less than current time, if so return true
if (date < Date.now()) {
this.userService.setCurrentUser(decoded);
return true;
} else {
return false;
}
}
}
----- BASI C МАРШРУТ
{
path: "projects",
component: ProjectsComponent,
canActivate: [AuthGuardService]
},
- --- МЕТОД ВЫХОДА СЛУЖБЫ ПОЛЬЗОВАТЕЛЯ
// Logout (used in navbar and by auth service)
logout() {
localStorage.removeItem(this.TOKEN_KEY);
this.removeCurrentUser();
this._router.navigate(["login"]);
}
Все кажется правильным. Пользователь получает токен из API, заходит в локальное хранилище. На каждом маршруте считывается токен и проверяется дата, если срок действия еще не истек, возвращается значение true, маршрут исправен. Если срок действия токена истек, я вызываю службу пользователя и метод выхода из системы. Этот метод уничтожает токен, удаляет свойство currentUser и перемещает пользователя на страницу входа. Перенаправление страницы входа не происходит.
Если я вернусь на страницу после того, как пройдет время и токен истечет, я не смогу перемещаться между angular страницами, но по какой-то причине я
Любая помощь приветствуется, спасибо!