import { inject, Injectable, signal } from '@angular/core';
import {
Auth,
signInWithEmailAndPassword,
createUserWithEmailAndPassword,
signOut,
UserCredential,
onAuthStateChanged,
User,
} from '@angular/fire/auth';
import { from, Observable } from 'rxjs';
import { Router } from '@angular/router';
@Injectable({
providedIn: 'root',
})
export class AuthService {
private readonly auth = inject(Auth);
private readonly router = inject(Router);
user = signal<User | null>(null);
isLoggedIn: boolean = false;
constructor() {
onAuthStateChanged(this.auth, (user) => {
this.user.set(user);
this.isLoggedIn = !!user;
if (user) {
console.log('Logged in as: ', user.email);
} else {
console.log('No user is logged in.');
this.router.navigate(['/login']);
}
});
}
getIsLoggedIn(): Promise<boolean> {
return new Promise((resolve) => {
onAuthStateChanged(this.auth, (user) => {
resolve(!!user);
});
});
}
signIn(email: string, password: string): Observable<UserCredential> {
return from(signInWithEmailAndPassword(this.auth, email, password));
}
signUp(email: string, password: string): Observable<UserCredential> {
return from(createUserWithEmailAndPassword(this.auth, email, password));
}
logOut() {
return signOut(this.auth);
}
}