我正在使用 BehaviorSubject 在登录时存储用户信息。出于某种奇怪的原因,BehaviorSubject 返回的用户信息null
位于为我的端点激活的 AuthGuard 中。请帮助我了解我错过了什么。
我已经尝试将主题返回为可观察的,订阅主题 ReplaySubject。似乎没有任何效果,并且用户信息在身份验证保护中始终为空。我已经在 app 模块和服务组件之间移动了 AuthService 提供者声明。那也没有帮助。在调用 auth guard 之前,设置用户信息的流程是正常的。一旦调用 auth guard,用户信息就会丢失。
用户注册:这是用户登录的步骤
onSubmit() {
this.document.location.href = environment.callbackUrl;
}
login组件:该组件设置用户信息
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();
}
auth guard:这里的用户信息为空
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;
}
预期:返回当前用户信息 实际:返回 null