src/app/_helpers/services/auth.service.ts
Properties |
|
Methods |
|
constructor(http: HttpClient)
|
||||||
Defined in src/app/_helpers/services/auth.service.ts:32
|
||||||
Parameters :
|
Public login | ||||||
login(user: literal type)
|
||||||
Defined in src/app/_helpers/services/auth.service.ts:69
|
||||||
Parameters :
Returns :
any
|
Public logout |
logout()
|
Returns :
void
|
Public refreshToken |
refreshToken()
|
Defined in src/app/_helpers/services/auth.service.ts:90
|
Returns :
any
|
Private updateData | ||||||
updateData(token: string)
|
||||||
Parameters :
Returns :
void
|
Public verifyToken | ||||||
verifyToken(token: string)
|
||||||
Defined in src/app/_helpers/services/auth.service.ts:36
|
||||||
Parameters :
Returns :
Observable<literal type>
|
Private ApiRefAuthUrl |
Default value : `${environment.apiBaseUrl}/api-token-refresh/`
|
Defined in src/app/_helpers/services/auth.service.ts:15
|
Private ApiTokAuthUrl |
Default value : `${environment.apiBaseUrl}/api/token/`
|
Defined in src/app/_helpers/services/auth.service.ts:13
|
Private ApiVerifAuthUrl |
Default value : `${environment.apiBaseUrl}/api/token/verify/`
|
Defined in src/app/_helpers/services/auth.service.ts:11
|
Public errors |
Type : any[]
|
Default value : []
|
Defined in src/app/_helpers/services/auth.service.ts:32
|
Private httpOptions |
Type : object
|
Default value : {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
}
|
Defined in src/app/_helpers/services/auth.service.ts:17
|
Public token |
Type : string | undefined
|
Defined in src/app/_helpers/services/auth.service.ts:22
|
Public token_expires |
Type : Date | undefined
|
Defined in src/app/_helpers/services/auth.service.ts:25
|
Public username |
Type : string | undefined
|
Defined in src/app/_helpers/services/auth.service.ts:28
|
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root',
})
export class AuthService {
private ApiVerifAuthUrl = `${environment.apiBaseUrl}/api/token/verify/`;
private ApiTokAuthUrl = `${environment.apiBaseUrl}/api/token/`;
private ApiRefAuthUrl = `${environment.apiBaseUrl}/api-token-refresh/`;
// Options HTTP utilisées pour effectuer les appels API
private httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
};
// Le jeton JWT réel
public token: string | undefined;
// La date d'expiration du jeton
public token_expires: Date | undefined;
// Le nom d'utilisateur de l'utilisateur connecté
public username: string | undefined;
// Messages d'erreur reçus lors de la tentative de connexion
// eslint-disable-next-line @typescript-eslint/no-explicit-any
public errors: any[] = [];
constructor(private http: HttpClient) {}
public verifyToken(
token: string
// eslint-disable-next-line @typescript-eslint/no-explicit-any
): Observable<{ status: boolean; data?: any }> {
const headers = new HttpHeaders({
'Content-Type': 'application/json',
'X-CSRFToken':
'eiasfUdm3tAA1j8nJYoL3fqBR6uFk3dJ7XCffWJ7v3oAGBXHKW4rWXxL1FoRUnXZ',
});
const body = { token };
return (
this.http
// eslint-disable-next-line @typescript-eslint/no-explicit-any
.post<any>(this.ApiVerifAuthUrl, body, {
headers,
observe: 'response',
})
.pipe(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
map((response: HttpResponse<any>) => {
return { status: response.status === 200, data: response.body };
}),
catchError(error => {
console.error('An error occurred:', error);
return throwError({ status: false });
})
)
);
}
// Utilise http.post() pour obtenir un jeton d'authentification à partir de l'endpoint djangorestframework-jwt
public login(user: { username: string; password: string }) {
return (
this.http
// eslint-disable-next-line @typescript-eslint/no-explicit-any
.post<any>(this.ApiTokAuthUrl, user, this.httpOptions)
.subscribe(
data => {
console.log(data['access']);
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const token = data['access'];
console.log('====>', token);
this.updateData(data['access']);
},
err => {
this.errors = err.error;
}
)
);
}
// Rafraîchit le jeton JWT pour prolonger la session de l'utilisateur
public refreshToken() {
return (
this.http
// eslint-disable-next-line @typescript-eslint/no-explicit-any
.post<any>(this.ApiRefAuthUrl, { token: this.token }, this.httpOptions)
.subscribe(
data => {
data;
console.log(data);
},
err => {
this.errors = err.error;
}
)
);
}
// Déconnexion de l'utilisateur
public logout() {
this.token = '';
this.token_expires;
this.username = '';
}
// Met à jour les données utilisateur après une connexion réussie ou un rafraîchissement de jeton
private updateData(token: string) {
this.token = token;
this.errors = [];
// Décoder le jeton pour lire le nom d'utilisateur et le timestamp d'expiration
const token_parts = token.split(/\./);
const token_decoded = JSON.parse(atob(token_parts[1]));
this.token_expires = new Date(token_decoded.exp * 1000);
this.username = token_decoded.username;
}
}