Angular的canActivate路由守卫出现无限循环问题
创始人
2024-10-24 02:00:31
0

通过使用 BehaviorSubject 来保存和共享认证状态,并且在认证状态变化时发出通知。

代码示例:

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { AuthService } from './auth.service';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';

@Injectable()
export class AuthGuard implements CanActivate {
  private isAuthenticatedSubject = new BehaviorSubject(false);

  constructor(private authService: AuthService, private router: Router) {
    this.authService.isAuthenticated().subscribe(isAuthenticated => {
      this.isAuthenticatedSubject.next(isAuthenticated);
    });
  }

  canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean {
    return this.isAuthenticatedSubject.take(1).map(isAuthenticated => {
      if (!isAuthenticated) {
        this.router.navigate(['/login']);
        return false;
      }
      return true;
    });
  }
}

在这个例子中,我们通过 BehaviorSubject 类创建了一个 isAuthenticatedSubject 对象,并设置其初始值为 false。这个对象用来保存认证状态,并且可以在多个地方订阅和获取其值。在 AuthGuard 构造函数中,我们订阅了 AuthGuard 服务的 isAuthenticated 方法,当这个方法的返回值发生变化时,会发出一个新的认证状态,我们则将其保存到 isAuthenticatedSubject 中。在 canActivate 方法中,我们通过 isAuthenticatedSubject.take(1) 实现了只获取一次 isAuthenticatedSubject 的值,并将其映射为一个布尔值。如果当前用户未认证,则会被重定向到登录页,并返回 false,否则返回 true。

相关内容

热门资讯

透视新版"xpoke... 透视新版"xpoker透视辅助"xpoker怎么作必弊(总是是有辅助插件)-哔哩哔哩透视新版"xpo...
透视总结"hhpok... 透视总结"hhpoker可以控制牌吗"购买wepoker模拟器(竟然真的有辅助平台)-哔哩哔哩1、这...
现有说明如下"aap... 现有说明如下"aapoker万能辅助器"wepoker免费辅助器(都是是有辅助安装)-哔哩哔哩1、w...
据公告内容"aapo... 据公告内容"aapoker破解侠是真的吗"wepoker插件下载(一贯是真的辅助下载)-哔哩哔哩aa...
有消息称"hhpok... 有消息称"hhpoker脚本下载"哈糖大菠萝软件下载(切实是真的辅助辅助器)-哔哩哔哩1、全新机制【...
透视计算"wepok... 透视计算"wepoker辅助软件视频"hhpoker辅助靠谱吗(都是是有辅助神器)-哔哩哔哩1、we...
经调查"wepoke... 经调查"wepoker有辅助吗"菠萝德普辅助器免费版在哪里(一贯有辅助修改器)-哔哩哔哩1、任何菠萝...
透视透视"wepok... 透视透视"wepoker私人局开挂视频"hhpoker脚本下载(总是真的是有辅助工具)-哔哩哔哩小薇...
透视规律"wpk真的... 透视规律"wpk真的有透视嘛"wepoker游戏安装教程(其实存在有辅助神器)-哔哩哔哩1、在wep...
出乎意料的是"pok... 出乎意料的是"pokemmo手机脚本辅助器"wepoker透视是真的吗(都是真的有辅助插件)-哔哩哔...