我该如何检查用户是否登录

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


获取值是真还是假,但我无法控制台记录它,我知道这是错误的,但是如果用户从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']);
    }
  }
}

最佳答案

CanActivate可以返回一个Observable。

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

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

关于javascript - canActive angular如何从auth中获取值true false(是否登录),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57087116/

10-16 22:28