auth.service.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. private userName!: string
  11. constructor(private http: HttpClient, private router: Router) { }
  12. // -- API Calls --
  13. register(payload: RegisterPayload): Observable<AuthResponse> {
  14. return this.http.post<AuthResponse>(`${this.baseUrl}/auth/register`, payload);
  15. }
  16. login(payload: LoginPayload): Observable<AuthResponse> {
  17. return this.http.post<AuthResponse>(`${this.baseUrl}/auth/login`, payload);
  18. }
  19. setUserName(username: string) {
  20. this.userName = username
  21. }
  22. getUsername(): string {
  23. return this.userName
  24. }
  25. // -- Token Management --
  26. storeToken(token: string): void {
  27. localStorage.setItem(this.tokenKey, token);
  28. }
  29. getToken(): string | null {
  30. return localStorage.getItem(this.tokenKey);
  31. }
  32. isLoggedIn(): boolean {
  33. return !!this.getToken();
  34. }
  35. logout(): void {
  36. localStorage.removeItem(this.tokenKey);
  37. this.router.navigate(['/login']);
  38. }
  39. getServerUrl(): Observable<string> {
  40. return this.http.get(`${this.baseUrl}/server`, {
  41. responseType: 'text'
  42. });
  43. }
  44. }