Мне нужна консультация в режиме auth с поддержкой https://github.com/auth0/angular2-jwt/tree/v1.0
JWT Interceptor. Как я могу выполнить роль "admin" с помощью Angular 5?
Теперь у меня есть: после того, как логин-сервер отправит обратно токен jwt с идентификатором пользователя в полезной нагрузке и с помощью canActivate, мое приложение проверяет наличие токена, а затем разрешает вводить защищенные сайты.
@Injectable()
export class EnsureAuthenticated implements CanActivate {
constructor(private auth: AuthService, private router: Router) {}
canActivate(): boolean {
if (localStorage.getItem('token')) {
return true;
} else {
this.router.navigateByUrl('/login');
return false;
}
}
}
и мой безопасный rote:
export const SECURE_ROUTES: Routes = [
{ path: 'home', component: HomeComponent, canActivate: [EnsureAuthenticated] },
{ path: 'homeadmin', component: HomeadminComponent, canActivate: [AuthenticatedAdmin] },
];
и после этого я хотел создать что-то вроде этого:
@Injectable()
export class AuthenticatedAdmin implements CanActivate {
constructor(private auth: AuthService, private router: Router) {}
canActivate(): boolean {
if ("in token is admin") {
return true;
} else {
this.router.navigateByUrl('/login');
return false;
}
}
}
В этом подходе мне нужен токен декодирования с https://github.com/auth0/jwt-decode
Считаете ли вы, что это правильный подход? Пожалуйста, дайте мне знать, если у вас есть лучшее решение этой проблемы.
Да, потому что JWT кодирует ваши данные в разделе полезной нагрузки. Если вы хотите получить какое-либо свойство, вам нужно декодировать всю полезную нагрузку.
Когда вы анализируете код в angular2-jwt, вы находите метод в классе JwtHelper для получения даты истечения срока годности. В своей реализации найдите в третьей строке, чтобы извлечь дату истечения срока действия, вам нужно сначала декодировать всю полезную нагрузку на токен.
Пример ниже из углового2-jwt
public getTokenExpirationDate(token: string): Date {
let decoded: any;
decoded = this.decodeToken(token);
if (!decoded.hasOwnProperty('exp')) {
return null;
}
let date = new Date(0); // The 0 here is the key, which sets the date to the epoch
date.setUTCSeconds(decoded.exp);
return date;
}