Поэтому я использую angular 7 и пакет @auth0/angular-jwt. У меня есть защита авторизации на определенных маршрутах, где я проверяю, не истек ли срок действия токена jwt. Что бы я ни делал, этот метод всегда говорит, что срок действия токена истек. Я знаю, что токены действительны, потому что они работают почтальоном. У кого-нибудь есть опыт работы с этим методом isTokenExpired?
import { Injectable } from '@angular/core';
import { JwtHelperService } from '@auth0/angular-jwt';
@Injectable({ providedIn: 'root' })
export class AuthService {
private jwtHelper = new JwtHelperService()
// ...
public isAuthenticated(): boolean {
const token = localStorage.getItem('token');
// Check whether the token is expired and return
// true or false
return !this.jwtHelper.isTokenExpired(token);
}
}
Что вы используете для создания токена?
Вы проверили, действительно ли в локальном хранилище был токен?
часть функции isTokenExpired: if (token === null || token === '') { return true; }
@BrandonMiller Я использую jwt.sign() на своем бэкэнде узла
@jonathanHeindl У меня есть console.info, и да, я всегда получаю токен из локального хранилища. Должен ли он быть отформатирован определенным образом? У меня есть только токен, а не JWT перед ним.
@matt, можешь показать, что ты устанавливаешь в качестве exp на бэкенде? Если вы используете 'expiresIn', помните, что его нужно передавать как объект, например {expiresIn: '1h'}.
@BrandonMiller ааа, вот оно! Глупец, я думал, что по умолчанию устанавливается срок действия... огромное спасибо!
@matt рад, что смог помочь! Не забудьте пометить это как ответ, чтобы в будущем он мог лучше помочь другим пользователям :)





Можете ли вы показать, что вы устанавливаете в качестве exp на бэкэнде?
Если вы используете 'expiresIn', помните, что его нужно передавать как объект, например:
{ expiresIn : '1h' }
LOL есть пакет для этого :o :D это просто какая-то кодировка base64 наверное быстрее написать скрипт чем искать пакет