auth.service.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { Injectable } from '@angular/core';
  2. import { HttpClient } from '@angular/common/http';
  3. import { Router } from '@angular/router';
  4. import { Observable } from 'rxjs';
  5. import { AuthResponse, LoginPayload, RegisterPayload } from '../interfaces/interface';
  6. @Injectable({ providedIn: 'root' })
  7. export class AuthService {
  8. private readonly baseUrl = 'http://localhost:3000';
  9. private readonly tokenKey = 'auth_token';
  10. constructor(private http: HttpClient, private router: Router) { }
  11. // -- API Calls --
  12. register(payload: RegisterPayload): Observable<AuthResponse> {
  13. return this.http.post<AuthResponse>(`${this.baseUrl}/auth/register`, payload);
  14. }
  15. login(payload: LoginPayload): Observable<AuthResponse> {
  16. return this.http.post<AuthResponse>(`${this.baseUrl}/auth/login`, payload);
  17. }
  18. // -- Token Management --
  19. storeToken(token: string): void {
  20. localStorage.setItem(this.tokenKey, token);
  21. }
  22. getToken(): string | null {
  23. return localStorage.getItem(this.tokenKey);
  24. }
  25. isLoggedIn(): boolean {
  26. return !!this.getToken();
  27. }
  28. logout(): void {
  29. localStorage.removeItem(this.tokenKey);
  30. this.router.navigate(['/login']);
  31. }
  32. getServerUrl(): Observable<string> {
  33. return this.http.get(`${this.baseUrl}/server`, {
  34. responseType: 'text'
  35. });
  36. }
  37. }