UNPKG

jangular-cli

Version:

A powerful CLI tool for rapidly bootstrapping Angular 17 & Spring Boot (Java 21) applications with integrated security, services, and enterprise-ready best practices.

102 lines (91 loc) 2.54 kB
import { Injectable, Inject, PLATFORM_ID } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { environment } from '../../environments/environment'; import { isPlatformBrowser } from '@angular/common'; @Injectable({ providedIn: 'root', }) export class AuthService { private endpoint = '/api/auth'; private apiUrl = environment.apiUrl + this.endpoint; constructor( private http: HttpClient, @Inject(PLATFORM_ID) private platformId: object // Inject platform info ) { } /** * Login request to backend */ login(username: string, password: string): Observable<any> { return this.http.post(`${this.apiUrl}/login`, { username, password }).pipe( tap((res: any) => { if (res.accessToken) { this.storeTokens(res.accessToken, res.refreshToken); } }) ); } /** * Register new user */ register(user: any): Observable<any> { return this.http.post(`${this.apiUrl}/register`, user); } /** * Refresh token request */ refreshToken(refreshToken: string): Observable<any> { return this.http.post(`${this.apiUrl}/refresh`, { refreshToken }).pipe( tap((res: any) => { if (res.accessToken) { this.storeTokens(res.accessToken, res.refreshToken); } }) ); } /** * Logout function */ logout(): void { if (isPlatformBrowser(this.platformId)) { localStorage.removeItem('access_token'); localStorage.removeItem('refresh_token'); } } /** * Check if user is authenticated */ isAuthenticated(): boolean { if (isPlatformBrowser(this.platformId)) { return !!localStorage.getItem('access_token'); } return false; // Return false in SSR environment } /** * Get stored access token */ getAccessToken(): string | null { if (isPlatformBrowser(this.platformId)) { return localStorage.getItem('access_token'); } return null; } /** * Store tokens in local storage */ private storeTokens(accessToken: string, refreshToken: string): void { if (isPlatformBrowser(this.platformId)) { localStorage.setItem('access_token', accessToken); localStorage.setItem('refresh_token', refreshToken); } } /** * Get authentication headers for protected requests */ getAuthHeaders(): HttpHeaders { return new HttpHeaders({ Authorization: `Bearer ${this.getAccessToken()}`, }); } }