Spaces:
Running
Running
File size: 1,634 Bytes
aa570a7 3b93905 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import { Injectable, inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';
import { BehaviorSubject, Observable, tap } from 'rxjs';
interface LoginResponse {
token: string;
username: string;
}
@Injectable({
providedIn: 'root'
})
export class AuthService {
private http = inject(HttpClient);
private router = inject(Router);
private tokenKey = 'flare_token';
private usernameKey = 'flare_username';
private loggedInSubject = new BehaviorSubject<boolean>(this.hasToken());
public loggedIn$ = this.loggedInSubject.asObservable();
login(username: string, password: string): Observable<LoginResponse> {
return this.http.post<LoginResponse>('/api/login', { username, password })
.pipe(
tap(response => {
this.setToken(response.token);
this.setUsername(response.username);
this.loggedInSubject.next(true);
})
);
}
logout(): void {
localStorage.removeItem(this.tokenKey);
localStorage.removeItem(this.usernameKey);
this.loggedInSubject.next(false);
this.router.navigate(['/login']);
}
getToken(): string | null {
return localStorage.getItem(this.tokenKey);
}
getUsername(): string | null {
return localStorage.getItem(this.usernameKey);
}
setToken(token: string): void {
localStorage.setItem(this.tokenKey, token);
}
setUsername(username: string): void {
localStorage.setItem(this.usernameKey, username);
}
hasToken(): boolean {
return !!this.getToken();
}
isLoggedIn(): boolean {
return this.hasToken();
}
} |