angular - 如何做路由器认证保护?变得可观察从 AngularFireAuth 然后转换为保护的布尔值
问题描述
我正在使用带有 AngularFireAuth 的路由器保护来检查用户是否可以输入路由。问题是,AngularFireAuth 返回一个<User>
类型,而守卫需要一个<boolean>
类型。
我在我的崇高文本中收到一条错误消息:'Type User is notassignable to type boolean'
我正在关注本教程:https ://angularfirebase.com/lessons/google-user-auth-with-firestore-custom-data/
我不知道如何将从 AngularFireAuth 类型检索到的转换为路由器保护。
这是auth.service
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)
}
})
)
}
这是auth.guard
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']);
}
})
)
错误'Type User is not assignable to type boolean'来自return this.auth.user.pipe()
. 在auth.guard
任何帮助,将不胜感激。
谢谢。
解决方案
啊..我刚看到那个博客的评论部分。
那里的代码有一个错字:
return this.auth.user.pipe()
take(1),
应该
return this.auth.user.pipe(
take(1),
现在它起作用了。
推荐阅读
- tensorflow - GPU中的Tensorflow默认数据格式
- typography - Gatsby.js - Typography.js
- android - 通知消息样式存储消息的位置
- c# - 在 C# 中生成 HTML 的最简洁方法是什么?
- azure - 在应用服务中访问 Azure MSI IMDS 端点时出现错误“无法连接到远程服务器”
- nodemcu - NodeMCU 从 webswerver 获取数据并更新值
- java - org.apache.spark.sql.AnalysisException: Can't extract value from UDF_DTTM_3#54: need struct type but got timestamp;
- c++ - 被这个语法迷惑了
- java - 如何使用 java 和 JSch 停止 Linux 上的 tomcat 服务器?
- android - 在 react-native 中管理堆栈的最佳导航方法是什么?