这是一个类型脚本文件,我试图从另一个服务的可观察对象实现身份验证保护,但这个烦人的错误不断出现在中
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree, } from '@angular/router';
import { ToastrService } from 'ngx-toastr';
import { map, Observable } from 'rxjs';
import { AccountsService } from 'src/Services/Accounts.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private accountsService: AccountsService, private toastr: ToastrService, private router: Router) {}
canActivate(): Observable<boolean> {
return this.accountsService.currentUser$.pipe(
map((user) =>{
if(user) return true;
})
)
}
}
在此处输入图像描述
如果没有user
,您的map
将返回undefined
。
您需要为每种情况返回一个值:
map((user) =>{
return user !== null && user !== undefined;
})
问题是,只有当用户是真实的时,才从map
返回一些东西。你也应该回来接另一个案子。试试这个:
canActivate(): Observable<boolean> {
return this.accountsService.currentUser$.pipe(
map((user) => !!user)
);
}
如果条件失败,函数将返回默认值,即未定义,但函数应返回布尔
canActivate(): Observable<boolean> {
return this.accountsService.currentUser$.pipe(map(Boolean));
}