Javascript 刷新后firebase uid变得未定义
因此,问题在于标题,在刷新页面或加载不同页面后,用户唯一id变得未定义。虽然我仍然可以使用其他用户数据,如姓名或电子邮件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
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或notfirebase.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的示例:)