Angular 5-ролевая аутентификация с помощью @ auth0 / angular-jwt

1

Мне нужна консультация в режиме 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 Считаете ли вы, что это правильный подход? Пожалуйста, дайте мне знать, если у вас есть лучшее решение этой проблемы.

Теги:
angular5
roles
authorization
angular2-jwt

1 ответ

0

Да, потому что 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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню