Angular 以支票支付的本票';t在方法以10的角度运行之前完成
angular 10构造函数中oidc客户端的承诺解析时间太长,在构造函数将de值放入用户变量之前调用isLoggedIn函数 这是我的代码:Angular 以支票支付的本票';t在方法以10的角度运行之前完成,angular,typescript,angular-promise,oidc-client-js,oidc-client,Angular,Typescript,Angular Promise,Oidc Client Js,Oidc Client,angular 10构造函数中oidc客户端的承诺解析时间太长,在构造函数将de值放入用户变量之前调用isLoggedIn函数 这是我的代码: import { UserManager, UserManagerSettings, User } from 'oidc-client'; export class AuthService { private user: User = null; private manager = new UserManager(getClientSettin
import { UserManager, UserManagerSettings, User } from 'oidc-client';
export class AuthService {
private user: User = null;
private manager = new UserManager(getClientSettings());
privatecachedRequests: Array<HttpRequest<any>> = [];
constructor() {
this.manager.getUser().then(user => {
this.user = user;
});
}
isLoggedIn(): boolean {
return this.user != null && !this.user.expired; <= this.user is null because the constructor did not finished the async part
}
从“oidc客户端”导入{UserManager,UserManagerSettings,User};
导出类身份验证服务{
私有用户:user=null;
私有管理器=新用户管理器(getClientSettings());
privatecachedRequests:Array=[];
构造函数(){
this.manager.getUser().then(user=>{
this.user=用户;
});
}
isLoggedIn():布尔值{
返回this.user!=null&&!this.user.expired;使用Rxjs
Subject作为代理
import {Subject } from 'rxjs',<-- add this
export class AuthService {
private user: User = null;
private manager = new UserManager(getClientSettings());
privatecachedRequests: Array<HttpRequest<any>> = [];
private loginSubject= new Subject()<-- add this line
constructor() {
this.manager.getUser().then(user => {
this.user = user;
if(this.user != null && !this.user.expired)
{
this.loginSubject.next(true)
} else{
this.loginSubject.next(false)
}
});
}
isLoggedIn(): Observable<boolean> {
return this.loginSubject.asObservbale();<-- avoid leak
}
import{Subject}from'rxjs',您在哪里以及如何使用isLogged()
方法?如果这个问题与角度版本无关,异步执行需要适当处理,如果您能提供一些见解,我将能够为您提供解决方案。我在我的路由保护(canActivate)中使用isLogged()Cu激活():布尔{if(这个.AuthService,IsLogGeDIN)()返回true;}。AuthService。StasTuuTnTiCuffy();返回false;} AHAN,这就足够了,给我一个时间。考虑使用<代码> Appy初始化器< /Cord>来配置执行服务的异步初始化。
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import {map} from 'rxjs/operators';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService:AuthService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.authService.isLoggedIn().pipe(
map(res => {
if (res) {
return true;
} else {
this.router.navigate(['/login']);
return false
}
})
}
}