Alexsandro_Andrade 5 de jan. de 2023
LoginService
import { Router } from '@angular/router' ;
import { environment } from 'src/environments/environment' ;
import { HttpClient } from '@angular/common/http' ;
import { Injectable } from '@angular/core' ;
import jwtDecode from 'jwt-decode' ;
@Injectable ({
providedIn : 'root'
})
export class LoginService {
url = `$ { environment . API } / api / login ` ;
private urlRefreshToken = `$ { environment . API } / private / refresh_token ` ;
constructor ( private http : HttpClient , private router : Router ) { }
async login ( user : any ) {
const result = await this . http . post < any > ( this . url , user , {
observe : 'response' ,
}) . toPromise ();
const token = result ! . headers . get ( 'Authorization' );
if ( token ) {
window . localStorage . setItem ( 'token' , token );
return result ;
}
return false ;
}
getAuthorizationToken () {
return window . localStorage . getItem ( 'token' );
}
isTokenExpired ( token ? : string ): boolean {
if ( ! token ) {
return true ;
}
const date = this . getTokenExpirationDate ( token );
if ( date === undefined ) {
return false ;
}
return ! ( date . valueOf () > new Date () . valueOf ());
}
isUserLoggedIn () {
const token = this . getAuthorizationToken ();
if ( ! token ) {
return false ;
} else if ( this . isTokenExpired ( token )) {
return false ;
}
return true ;
}
getTokenExpirationDate ( token : string ): Date {
try {
const decoded : any = jwtDecode ( token );
if ( decoded . exp === undefined ) {
return null
}
const date = new Date ( 0 );
date . setUTCSeconds ( decoded . exp );
return date ;
} catch ( error ) {
console . error ( error );
window . localStorage . removeItem ( 'token' );
this . router . navigate ([ '' ]);
}
return null ;
}
async refreshToken () {
if ( ! this . isUserLoggedIn ()) {
return false ;
}
const result = await this . http . post ( this . urlRefreshToken , null , {
observe : 'response' ,
}) . toPromise ();
const token = result . headers . get ( 'Authorization' );
if ( token ) {
window . localStorage . setItem ( 'token' , token );
return result ;
}
return false ;
}
}
Alexsandro_Andrade 5 de jan. de 2023
Observem que dentro do meu Service eu estou recebendo o token de autenticacao normalmente, pois meu login e senha estao corretos