1
+ import { Injectable } from '@angular/core' ;
2
+ import { Router } from '@angular/router' ;
3
+ import { HttpClient } from '@angular/common/http' ;
4
+ import { BehaviorSubject , Observable } from 'rxjs' ;
5
+ import { map , tap } from 'rxjs/operators' ;
6
+ import { environment } from '../environments/environment' ;
7
+ import { User } from '../models/user.model' ;
8
+
9
+ @Injectable ( { providedIn : 'root' } )
10
+ export class AuthenticationService {
11
+ private userSubject : BehaviorSubject < User | null > ;
12
+ public user : Observable < User | null > ;
13
+
14
+ constructor (
15
+ private router : Router ,
16
+ private http : HttpClient
17
+ ) {
18
+ this . userSubject = new BehaviorSubject ( JSON . parse ( localStorage . getItem ( 'user' ) ! ) ) ;
19
+ this . user = this . userSubject . asObservable ( ) ;
20
+ }
21
+
22
+ public get userValue ( ) {
23
+ return this . userSubject . value ;
24
+ }
25
+
26
+ login ( username : string , password : string ) {
27
+ console . log ( 'in authentication service login' ) ;
28
+ console . log ( username , password ) ;
29
+ console . log ( `${ environment . UserServiceApiUrl } /auth/login` ) ;
30
+ return this . http . post < any > ( `${ environment . UserServiceApiUrl } /auth/login` ,
31
+ { "username" : username , "password" : password } )
32
+ . pipe (
33
+ tap ( response => {
34
+ console . log ( 'HTTP POST response:' , response ) ;
35
+ } ) ,
36
+ map ( response => {
37
+ // store user details and jwt token in local storage to keep user logged in between page refreshes
38
+ const user = response . data ;
39
+ localStorage . setItem ( 'user' , JSON . stringify ( user ) ) ;
40
+ this . userSubject . next ( user ) ;
41
+ return user ;
42
+ } ) ) ;
43
+ }
44
+
45
+ logout ( ) {
46
+ // remove user from local storage to log user out
47
+ localStorage . removeItem ( 'user' ) ;
48
+ this . userSubject . next ( null ) ;
49
+ this . router . navigate ( [ '/login' ] ) ;
50
+ }
51
+ }
0 commit comments