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
text/typescript
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';
({
providedIn: 'root',
})
export class AuthService {
private endpoint = '/api/auth';
private apiUrl = environment.apiUrl + this.endpoint;
constructor(
private http: HttpClient,
(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()}`,
});
}
}