Angular Login Flow (wait for router)

JS
S
JavaScript

Angular Login Flow (wait for router)

1export class AuthService {
2  private apiUrl = environment.apiUrl;
3  public loggedIn$ = new ReplaySubject<boolean>();
4  public authenticatedUser$ = new ReplaySubject<JwtUserModel>();
5  public ready = false;
6
7  constructor(
8    private httpClient: HttpClient,
9    private route: ActivatedRoute,
10    private router: Router,
11    private jwtHelperService: JwtHelperService) {
12
13    this.router.events
14      .subscribe((event) => {
15        if (!this.ready && event && event instanceof ActivationStart) {
16          this.ready = true;
17          console.log('router events finished');
18          const token = event.snapshot.queryParams.token || localStorage.getItem('access_token');
19          this.loginFlow(token);
20        }
21      });
22  }
23
24
25  loginFlow(token: string) {
26    if (token) {
27      this.loginWithApi(token)
28      .pipe(first())
29      .subscribe(
30        (result) => {
31          if (result.status === 'OK') {
32            this.setLoggedIn(token);
33          } else {
34            this.logout();
35          }
36        },
37        (err: any) => {
38          this.logout();
39        }
40      );
41    } else {
42      this.logout();
43    }
44  }

Created on 7/11/2019