javascript - canActive Angular 如何从身份验证中获取值 true false (用户是否登录)

标签 javascript angular typescript

如何检查用户是否登录,我用这个

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

最佳答案

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 如何从身份验证中获取值 true false (用户是否登录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57087116/

相关文章:

debugging - 如何在 Visual Studio 2015 asp.net 5 中调试 Typescript?

javascript - jQuery UI Portlet 问题(无法单击输入框)

javascript - 驱动器API : DeadlineExceededException when updating a file

javascript - Angular 性能 - 管道与 setter/getter

Angular - 在服务和组件中使用管道

typescript - 在类中使用 requestAnimationFrame

javascript - 在 javascript 中,空字符串作为 boolean 值总是 false 吗?

javascript - promise 成功回调在链接 promise 后没有被调用

javascript - 根据 TypeScript 中的条件将数据从一个数组推送到另一个数组

typescript - 从子组件路由到父级的路由器导出