Angular Firebase:页面刷新后无法获取当前用户
我试图在Firestore中检索一个文档,其中包含游戏当前用户(玩家)的数据;我能够获取文档,但是只要我刷新页面,Angular Firebase:页面刷新后无法获取当前用户,angular,firebase,firebase-authentication,Angular,Firebase,Firebase Authentication,我试图在Firestore中检索一个文档,其中包含游戏当前用户(玩家)的数据;我能够获取文档,但是只要我刷新页面,firebase.auth().currentUser就会变为空。如果有区别,用户将匿名登录。我试图改变这种坚持,但似乎什么都没有改变 在my gameService.ts文件中: private getCurrentPlayer(gameId: string){ return this.afs.doc(`games/${gameId}/players/${firebase.
firebase.auth().currentUser
就会变为空。如果有区别,用户将匿名登录。我试图改变这种坚持,但似乎什么都没有改变
在my gameService.ts文件中:
private getCurrentPlayer(gameId: string){
return this.afs.doc(`games/${gameId}/players/${firebase.auth().currentUser.uid}`);
}
在my component.ts文件中:
constructor(private gameService: GameService, private route: ActivatedRoute)
{
gameService.currentPlayer.valueChanges().subscribe(user =>{
console.log(user)
this.currentPlayer = user;
});
}
任何帮助都将不胜感激。谢谢 必须使用localStorage进行持久性存储:
localStorage.setItem('user', user)
然后,如果您想使用用户obj,您可以这样做
myUser = localStorage.getItem('user')
这样写:
return this.angularFireAuth.authState
.pipe(
filter(user => !!user),
switchmap(user => this.afs.doc(`games/${gameId}/players/${user.uid}`));
observable可以在任何时候设置,包括在构造函数中,但在有可识别的用户之前不会触发,此时,它将为该用户提供所需的文档。请记住,
currentUser
不会在应用程序刷新后启动并开始构建准备启动的内容时进行设置。只有在时钟经过几次滴答声后才会设置,在此期间Firebase会发现有人登录并进行处理。您的代码需要考虑这种延迟。例如,您可能希望将代码从构造函数中移到一个在ngOnInit
中触发的方法中,就像一个例子一样。@torazaburo感谢我创建了一个sleep方法来延迟调用getCurrentPlayer()
,这个方法很有效,但是这种方法看起来有点草率。有没有更好的方法来实现这一点?谢谢