Я использую BehaviorSubject для хранения информации о пользователе при входе в систему. По какой-то странной причине пользовательская информация, возвращаемая BehaviorSubject, в AuthGuard null
активируется для моей конечной точки. Пожалуйста, помогите мне понять, что я упускаю.
Я уже пытался вернуть предмет в качестве наблюдаемого, подписаться на предмет, ReplaySubject. Кажется, ничего не работает, и пользовательская информация всегда пуста в auth guard. Я переместил объявление поставщика AuthService между модулем приложения и компонентом службы. Это также не помогло. До тех пор, пока вызов не перейдет в режим проверки подлинности, поток будет нормальным, если задана информация о пользователе. Как только вызывается защита аутентификации, информация о пользователе теряется.
user reg: На этом шаге пользователь входит в систему
onSubmit() {
this.document.location.href = environment.callbackUrl;
}
компонент входа: этот компонент устанавливает информацию о пользователе
this.authService.setUserInfo(user);
if (user.id_token!=null && user.role!=null && user.isLoggedIn){
this.router.navigate(['/view-main/datalogger-list']);
}
служба проверки подлинности
userSubject: BehaviorSubject<UserInfo> = new BehaviorSubject<UserInfo>(null);
setUserInfo(user: UserInfo){
if(user && user !=null){
this.userSubject.next(user);
}
}
getUserInfo() {
return this.userSubject.asObservable();
}
защита проверки подлинности: здесь информация о пользователе имеет значение null
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
debugger
let userInfo:UserInfo;
this.authService.getUserInfo().subscribe(user => {
console.log('Evaluating in auth guard');
console.log('User: ', user);
//if user is logged in and role info is available from database.
if(user && user!=null
&& user.role!=null && user.role.trim().length>0
&& user.wwid!=null && user.wwid.trim().length>0){
// allow user
userInfo = user;
return true;
}
// TO-DO user logged in but do not have information from database -How i will knwo this?
else if(user && user!=null
&& user.wwid!=null && user.wwid.trim().length>0
&& (user.role==null || user.role=='undefined') ){
this.router.navigate(['welcome']);
return false;
}else{
// redirect user to oidc urls
this.router.navigate(['welcome']);
return false;
}
})
return false;
}
Ожидается: Возвращает текущую информацию о пользователе. Actual: Возвращает null