如何做路由器认证保护?变得可观察<;用户>;从AngularFireAuth,然后转换为警卫的布尔值
我正在使用路由器防护和AngularFireAuth来检查用户是否可以进入路由。问题是,AngularFireAuth返回如何做路由器认证保护?变得可观察<;用户>;从AngularFireAuth,然后转换为警卫的布尔值,angular,ionic-framework,rxjs,Angular,Ionic Framework,Rxjs,我正在使用路由器防护和AngularFireAuth来检查用户是否可以进入路由。问题是,AngularFireAuth返回类型,而guard需要类型 我在升华文本中收到一条错误消息:“类型用户不可分配给类型布尔” 我将遵循本教程: 我不知道如何将从AngularFireAuth类型检索到的数据转换为路由器保护 这是身份验证服务 interface User { uid: string; email: string; photoURL?: string; displayName?
类型,而guard需要
类型
我在升华文本中收到一条错误消息:“类型用户不可分配给类型布尔”
我将遵循本教程: 我不知道如何将从AngularFireAuth类型检索到的数据转换为路由器保护 这是身份验证服务
interface User {
uid: string;
email: string;
photoURL?: string;
displayName?: string;
favoriteColor?: string;
}
@Injectable({ providedIn: 'root' })
export class AuthService {
user: Observable<User>;
constructor(
private afAuth: AngularFireAuth,
private afs: AngularFirestore,
private router: Router
) {
//// Get auth data, then get firestore user document || null
this.user = this.afAuth.authState.pipe(
switchMap(user => {
if (user) {
return this.afs.doc<User>(`users/${user.uid}`).valueChanges()
} else {
return of(null)
}
})
)
}
用户界面{
uid:字符串;
电子邮件:字符串;
photoURL?:字符串;
displayName?:字符串;
favoriteColor?:字符串;
}
@可注射({providedIn:'root'})
导出类身份验证服务{
用户:可观察;
建造师(
私人afAuth:AngularFireAuth,
私人afs:AngularFirestore,
专用路由器
) {
////获取身份验证数据,然后获取firestore用户文档| | null
this.user=this.afAuth.authState.pipe(
开关映射(用户=>{
如果(用户){
返回此.afs.doc(`users/${user.uid}`)。valueChanges()
}否则{
返回(空)
}
})
)
}
这是授权保护
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> {
return this.auth.user.pipe()
take(1),
map(user => !!user),
tap(loggedIn => {
if (!loggedIn) {
console.log('access denied')
this.router.navigate(['/login']);
}
})
)
canActivate(
下一步:ActivatedRouteSnapshot,
状态:RouterStateSnapshot):可观察{
返回此.auth.user.pipe()
以(1)为例,
映射(用户=>!!用户),
点击(loggedIn=>{
如果(!loggedIn){
console.log('访问被拒绝')
this.router.navigate(['/login']);
}
})
)
错误'Type User不可分配给Type boolean'来自在auth.guard中返回this.auth.User.pipe()
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> {
return this.auth.user.pipe()
take(1),
map(user => !!user),
tap(loggedIn => {
if (!loggedIn) {
console.log('access denied')
this.router.navigate(['/login']);
}
})
)
任何帮助都将不胜感激
谢谢。啊..我刚刚在那个博客上看到了评论部分 那里的代码有一个输入错误:
return this.auth.user.pipe()
take(1),
应该是
return this.auth.user.pipe(
take(1),
现在它起作用了