1
1
// Modified from https://jasonwatmore.com/post/2022/11/15/angular-14-jwt-authentication-example-tutorial#login-component-ts
2
2
import { Injectable } from '@angular/core' ;
3
3
import { Router } from '@angular/router' ;
4
- import { HttpClient } from '@angular/common/http' ;
4
+ import { HttpClient , HttpResponse } from '@angular/common/http' ;
5
5
import { BehaviorSubject , Observable } from 'rxjs' ;
6
- import { map , switchMap } from 'rxjs/operators' ;
6
+ import { map , switchMap , tap } from 'rxjs/operators' ;
7
7
import { environment } from '../_environments/environment' ;
8
8
import { User } from '../_models/user.model' ;
9
9
import { UServRes } from '../_models/user.service.response.interface' ;
@@ -27,19 +27,29 @@ export class AuthenticationService {
27
27
28
28
login ( username : string , password : string ) {
29
29
return this . http
30
- . post < UServRes > ( `${ environment . UserServiceApiUrl } /auth/login` , { username : username , password : password } )
30
+ . post < UServRes > ( `${ environment . UserServiceApiUrl } /auth/login` ,
31
+ { username : username , password : password } ,
32
+ { observe : 'response' } )
31
33
. pipe (
34
+ tap ( response => {
35
+ console . log ( response . status ) ;
36
+ console . dir ( response . body ) ;
37
+ } ) ,
32
38
map ( response => {
33
39
// store user details and jwt token in local storage to keep user logged in between page refreshes
34
- const data = response . data ;
35
- const user : User = {
36
- id : data . id ,
37
- username : data . username ,
38
- email : data . email ,
39
- accessToken : data . accessToken ,
40
- isAdmin : data . isAdmin ,
41
- createdAt : data . createdAt ,
42
- } ;
40
+ let user : User = { } ;
41
+ if ( response . body ) {
42
+ const body : UServRes = response . body ;
43
+ const data = body . data ;
44
+ user = {
45
+ id : data . id ,
46
+ username : data . username ,
47
+ email : data . email ,
48
+ accessToken : data . accessToken ,
49
+ isAdmin : data . isAdmin ,
50
+ createdAt : data . createdAt ,
51
+ } ;
52
+ }
43
53
localStorage . setItem ( 'user' , JSON . stringify ( user ) ) ;
44
54
this . userSubject . next ( user ) ;
45
55
return user ;
@@ -49,11 +59,9 @@ export class AuthenticationService {
49
59
50
60
createAccount ( username : string , email : string , password : string ) {
51
61
return this . http
52
- . post < UServRes > ( `${ environment . UserServiceApiUrl } /users` , {
53
- username : username ,
54
- email : email ,
55
- password : password ,
56
- } )
62
+ . post < UServRes > ( `${ environment . UserServiceApiUrl } /users` ,
63
+ { username : username , email : email , password : password } ,
64
+ { observe : 'response' } )
57
65
. pipe ( switchMap ( ( ) => this . login ( username , password ) ) ) ; // auto login after registration
58
66
}
59
67
0 commit comments