I login as user "admin" and i get a JWT response from my backend. I decode it in auth.service.ts as shown:
decodedToken() {
const jwtHelper = new JwtHelperService();
const token = this.getToken()!;
console.log(jwtHelper.decodeToken(token))
return jwtHelper.decodeToken(token);
}
getFullNameFromToken() {
if (this.payload) {
return this.payload.unique_name;
}
}
getRoleFromToken() {
if (this.payload) {
return this.payload.role;
}
}
i have a user store:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
@Injectable({
providedIn: 'root',
})
export class UserStoreService {
private fullName$ = new BehaviorSubject<string>('');
private role$ = new BehaviorSubject<string>('');
public getRoleFromStore() {
return this.role$.asObservable();
}
public setRoleForStore(role: string) {
this.role$.next(role);
}
public getFullNameFromStore() {
return this.fullName$.asObservable();
}
public setFullNameForStore(fullName: string) {
this.fullName$.next(fullName);
}
constructor() {}
}
and my component onInit()
ngOnInit(): void {
this.userStore.getFullNameFromStore().subscribe(val => {
let fullNameFromToken = this.auth.getFullNameFromToken();
this.name = val || fullNameFromToken;
})
}
once i log in first it doesn't display the name but after i refresh the site it displays the name.
also if I log out with my original admin user with name "admin" and log in with a second user on original load the admin user name "admin" will display but my second user name only displays after refresh
🙂