Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 以支票支付的本票';t在方法以10的角度运行之前完成_Angular_Typescript_Angular Promise_Oidc Client Js_Oidc Client - Fatal编程技术网

Angular 以支票支付的本票';t在方法以10的角度运行之前完成

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

angular 10构造函数中oidc客户端的承诺解析时间太长,在构造函数将de值放入用户变量之前调用isLoggedIn函数

这是我的代码:

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
        }
      })
  }   

}