flare / flare-ui /src /app /services /auth.service.ts
ciyidogan's picture
Update flare-ui/src/app/services/auth.service.ts
aa570a7 verified
raw
history blame
1.63 kB
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();
}
}