Não é uma dúvida e sim mais uma possível solução para quem esta no modulo Angular parte 2: Autenticação, Forms e lazy loading - Separação de responsabilidades
No no vídeo é passado o módulo jwt-decode
e se caso você estiver usando a versão mais recente e não funcionar, gerando um erro similar ao título deste tópico
TypeError: jwt_decode__WEBPACK_IMPORTED_MODULE_2__ is not a function
,
você pode utilizar o método do js atob()
Base64 - método atob()
A referência para esta solução foi encontrada neste link do Stackoverflow - How to decode jwt token in javascript without using a library?
O código fica assim:
import { UserInterface } from './user.interface';
import { Subject } from 'rxjs';
import { TokenService } from './../token/token.service';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class UserService {
private userSubject = new Subject<UserInterface>();
constructor(private tokenService: TokenService) {
if (this.tokenService.hasToken()) {
this.decodeAndNotify();
}
}
setToken(token: string) {
this.tokenService.setToken(token)
this.decodeAndNotify()
}
getUser() {
return this.userSubject.asObservable();
}
private decodeAndNotify() {
const token = this.tokenService.getToken()
const user = this.decode(token) as UserInterface;
this.userSubject.next(user);
}
// Decode sem o modulo jwt-decode
private decode(token: string) {
try {
return JSON.parse(atob(token.split('.')[1]));
} catch (e) {
console.log(`Nao foi possivel decodificar o token`)
}
}
}