Create a auth service at angular side
AuthService (src/app/auth/auth.service.ts)

 

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { BehaviorSubject, Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
import { Router } from '@angular/router';
import { environment } from 'src/environments/environment';

interface AuthResponse {
 token: string;
}

 

@Injectable({
 providedIn: 'root',
})
export class AuthService {


 private tokenSubject = new BehaviorSubject<string | null>(this.getToken());
 public token$ = this.tokenSubject.asObservable();
 public isLoggedIn$ = this.token$.pipe(
   map(token => !!token)
 );

 private apiUrl = environment.apiUrl + '/auth';

 constructor(private http: HttpClient, private router: Router) {}

 

 login(credentials: any): Observable<AuthResponse> {
   return this.http.post<AuthResponse>(`${this.apiUrl}/login`, credentials).pipe(
     tap(response => this.setToken(response.token))
   );
 }

 

 logout(): void {
   this.clearToken();
   this.router.navigate(['/login']);
 }

 

 getToken(): string | null {
   return localStorage.getItem('authToken');  // Get from Local Storage
 }

 

 private setToken(token: string): void {
   localStorage.setItem('authToken', token);  // Set in Local Storage
   this.tokenSubject.next(token);
 }

 

 private clearToken(): void {
   localStorage.removeItem('authToken');
   this.tokenSubject.next(null);
 }
}

 

 

Login Component for Authentication 
(src/app/auth/login/login.component.ts):

import { Component } from '@angular/core';
import { AuthService } from '../auth.service';
import { Router } from '@angular/router';

@Component({
 selector: 'app-login',
 templateUrl: './login.component.html',
 styleUrls: ['./login.component.css'],
})


export class LoginComponent {


 credentials = {
   username: '',
   password: '',
 };
 errorMessage = '';

 

 constructor(private authService: AuthService, private router: Router) {}

 

 login(): void {
   this.authService.login(this.credentials).subscribe({
     next: () => {
       this.router.navigate(['/home']);
     },
     error: (error) => {
       this.errorMessage = 'Invalid username or password.';
       console.error('Login failed', error);
     },
   });
 }
}

 


Related Question