@@ -5,7 +5,14 @@ import {catchError, tap} from 'rxjs/operators';
5
5
import { of } from 'rxjs' ;
6
6
import { plainToClass } from 'class-transformer' ;
7
7
8
- import { CheckCredentialsAction , CredentialsExpiredAction , LoginAction , LogoutAction , UnauthorizedAccessAction } from './auth.actions' ;
8
+ import {
9
+ CheckCredentialsAction ,
10
+ CredentialsExpiredAction ,
11
+ InvalidCredentialsAction ,
12
+ LoginAction ,
13
+ LogoutAction ,
14
+ UnauthorizedAccessAction
15
+ } from './auth.actions' ;
9
16
import { AuthenticatedUser } from '../auth.model' ;
10
17
import { AuthService } from '../auth.service' ;
11
18
import { HideSideNavAction , OpenLoginDialogAction } from '../../../../state/app.actions' ;
@@ -20,34 +27,38 @@ export interface SessionStateModel {
20
27
export const defaultSessionState : SessionStateModel = {
21
28
user : null ,
22
29
token : null ,
23
- state : 'guest' ,
24
- response : null
30
+ state : 'guest'
25
31
} ;
26
32
27
- let initialState : SessionStateModel = defaultSessionState ;
28
- if ( localStorage . getItem ( 'session' ) !== '' ) {
29
- let session : SessionStateModel = defaultSessionState ;
33
+ function initialSessionState ( ) {
34
+ let state : SessionStateModel = defaultSessionState ;
35
+
36
+ if ( localStorage . getItem ( 'session' ) !== '' ) {
37
+ let session : SessionStateModel = defaultSessionState ;
38
+
39
+ try {
40
+ const rawSession : any = JSON . parse ( localStorage . getItem ( 'session' ) ) ;
41
+ session = {
42
+ user : plainToClass ( AuthenticatedUser , rawSession . user ) as any as AuthenticatedUser ,
43
+ token : rawSession . token ,
44
+ state : rawSession . state
45
+ } ;
46
+ } catch ( e ) {
47
+ console . warn ( 'Invalid session found in localStorage.' ) ;
48
+ session = defaultSessionState ;
49
+ }
30
50
31
- try {
32
- const rawSession : any = JSON . parse ( localStorage . getItem ( 'session' ) ) ;
33
- session = {
34
- user : plainToClass ( AuthenticatedUser , rawSession ) as any as AuthenticatedUser ,
35
- token : rawSession . token ,
36
- state : rawSession . state
37
- } ;
38
- } catch ( e ) {
39
- console . warn ( 'Invalid session found in localStorage.' ) ;
40
- session = defaultSessionState ;
51
+ if ( session !== null && session . token !== '' ) {
52
+ state = session ;
53
+ }
41
54
}
42
55
43
- if ( session !== null && session . token !== '' ) {
44
- initialState = session ;
45
- }
56
+ return state ;
46
57
}
47
58
48
59
@State < SessionStateModel > ( {
49
60
name : 'session' ,
50
- defaults : initialState
61
+ defaults : initialSessionState ( )
51
62
} )
52
63
export class SessionState implements NgxsOnInit {
53
64
@@ -151,5 +162,9 @@ export class SessionState implements NgxsOnInit {
151
162
this . store . dispatch ( [ new OpenLoginDialogAction ( payload ) ] ) ;
152
163
}
153
164
165
+ @Action ( InvalidCredentialsAction )
166
+ invalidCredentialsSessionState ( ctx : StateContext < SessionStateModel > ) {
167
+ ctx . patchState ( { state : 'invalid.credentials' } ) ;
168
+ }
154
169
155
170
}
0 commit comments