Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.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
Javascript 如何从auth(用户登录与否)获取值true false_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 如何从auth(用户登录与否)获取值true false

Javascript 如何从auth(用户登录与否)获取值true false,javascript,angular,typescript,Javascript,Angular,Typescript,如何检查用户是否登录,我使用此 ngOnInit() { this.auth.subscribeLogger().subscribe( (data: any) => { this.checkUserLogin = data; } ); } 用于获取值true或false,但我无法控制台记录它,我知道它是错误的,但如果用户登录或未登录authservice,我如何获取值 这是文件history.guard.ts import {

如何检查用户是否登录,我使用此

ngOnInit() {
    this.auth.subscribeLogger().subscribe(
      (data: any) => {
        this.checkUserLogin = data;
      }
    );
  }
用于获取值true或false,但我无法控制台记录它,我知道它是错误的,但如果用户登录或未登录authservice,我如何获取值

这是文件
history.guard.ts

import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { AuthService } from 'app/core/service';

@Injectable({
  providedIn: 'root'
})
export class HistoryGuard implements CanActivate {
  checkUserLogin: boolean;
  constructor(
    private router: Router, 
    private auth: AuthService,
  ){}

  ngOnInit() {
    this.auth.subscribeLogger().subscribe(
      (data: any) => {
        this.checkUserLogin = data;
      }
    );
  }

  canActivate() {
    if(this.checkUserLogin){
      return true;
    }
    else{
      return this.router.navigate(['mypage']);
    }
  }
}

也许您可以使用async Wait来尝试这种方法

async canActivate() {
    const isAuthenticate = await this.auth.subscribeLogger();
    if(!isAuthenticate){
      return false;
    }
    else {
      return this.router.navigate(['mypage']);
    }
  }

ngOnInit应在指令或组件中实现。您可以尝试从类中删除它,并修改
canActivate
中的逻辑,如下所示:

canActivate() {
    this.auth.subscribeLogger().subscribe(
      (data: any) => {
        if(data) {
          return true;
        } else {
          return this.router.navigate(['mypage']);
        }
      }
    );
  }

CanActivate可以返回可观察到的

还没有测试过,但类似的东西应该可以工作:

constructor(private router: Router, private auth: AuthService){}

canActivate(route: ActivatedRouteSnapshot, routeState: RouterStateSnapshot): Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean|UrlTree {
    return this.auth.subscribeLogger().pipe(
      map(isUserLoggedin => {
          if (!isUserLoggedin) {
            this.router.navigate(['mypage']);
          }
          return isUserLoggedin; 
      });
}
构造函数(专用路由器:路由器,专用身份验证:身份验证服务){
canActivate(路由:ActivatedRouteSnapshot,routeState:RouterStateSnashot):可观察的|承诺|布尔| UrlTree{
返回此.auth.subscribeLogger()管道(
映射(isUserLoggedin=>{
如果(!isUserLoggedin){
这个.router.navigate(['mypage']);
}
返回isUserLoggedin;
});
}

它的值仍然为false!我测试时没有使用JWT_标记(false),然后使用JWT(仍然为false)它不起作用:(甚至我在canActivate()之后加上:any)我试图重现这个场景,保持它非常基本..并且@Stavm的答案更有希望。我知道了,但我仍然误解了在我的情况下如何获取auth值我想你的
this.auth.subscribeLogger
没有返回值它总是返回值“false”使用此链接可以获取完整代码[我将Observable更改为Observable但不起作用:(在我放入JWT_令牌后,值仍然为false非true。好的,请添加
console.log(isUserLoggedIn)
if(!isUserLoggedIn)上方的一行
输出是什么?始终为false!因为此subscribeLogger我在auservice中将其设置为false!我是否需要在auth.service.ts中创建新func因为subscribeLogger始终返回false?我是否需要在AuthService中编写一些代码才能订阅?