Javascript 刷新后firebase uid变得未定义

Javascript 刷新后firebase uid变得未定义,javascript,firebase,Javascript,Firebase,因此,问题在于标题,在刷新页面或加载不同页面后,用户唯一id变得未定义。虽然我仍然可以使用其他用户数据,如姓名或电子邮件 signinBut.addEventListener("click", e => { firebase.auth().signInWithPopup(provider).then(function(result) { var token = result.credential.accessToken; user = result.user; }).catc

因此,问题在于标题,在刷新页面或加载不同页面后,用户唯一id变得未定义。虽然我仍然可以使用其他用户数据,如姓名或电子邮件

  signinBut.addEventListener("click", e => {
firebase.auth().signInWithPopup(provider).then(function(result) {
  var token = result.credential.accessToken;
  user = result.user;

}).catch(function(error) {
  var errorCode = error.code;
  var errorMessage = error.message;
  var email = error.email;
  var credential = error.credential;
});
}))


下面是写入用户对象的函数

成功登录后,您的用户存储在
firebase.auth().currentUser
变量中。
当前,当页面加载时,您需要将用户登录并存储到局部变量。刷新页面后,用户将被删除-这就是他未定义的原因。您需要做的就是从
currentUser
获取用户,并检查它是否为null或not
firebase.auth().onAuthStateChanged(…)
将在这方面帮助您。

为确保您始终为用户获得正确的登录状态。您将使用此函数而不是当前的
then()
回调函数,因此:

signinBut.addEventListener("click", e => {
  firebase.auth().signInWithPopup(provider).catch(function(error) {
    var errorCode = error.code;
    var errorMessage = error.message;
    var email = error.email;
    var credential = error.credential;
  });
});

firebase.auth().onAuthStateChanged(function(user) {
  user = result.user;
});

在我的例子中,当发生这种情况时,我使用了authGaard,这样只有在服务完全启动时才允许加载组件

在组件路由的AppModule.ts文件中,添加了身份验证:

{path : 'view', component : ViewDetailsComponent, canActivate : [ViewDetailsGaurd]}
现在,在ViewDetailsGaud.ts中,它是guard服务:

canActivate() : Observable<boolean> {
   return this.authService.isInitCmpleted();
 }
canActivate():可观察{
返回此.authService.isInitCmpleted();
}
在AuthenticationService.ts中:

isInitCmpleted() : Observable<boolean> {
   return Observable.of(this.isServiceLoaded);
}
isInitCmpleted():可观察{
可观察的返回(此为服务加载);
}

我现在从firebase.auth()获取用户。currentUser,尽管它仍然提供未定义的用户uid。当用户签入firebase.auth()时,是否重新定义该用户。onAuthStateChanged(…)observer?Frank van Puffelen展示了使用onAuthStateChanged的示例:)