我使用Firebase构建了Angular 5登录,并通过以下方式在控制台中记录了当前用户。 它工作正常,也可以通过路由加载另一页。但是当我重新加载页面时,auth对象消失 - 但用户保持登录状态(home component.html中的用户名,例如保持显示)
登录Component.ts
onLoginEmail(): void {
if (this.validateForm(this.email, this.password)) {
this.authService.loginWithEmail(this.email, this.password)
.then(() => this.router.navigate(['/home']))
.catch(_error => {
this.error = _error
this.router.navigate(['/'])
})
}
}
auth.service.ts
loginWithEmail(email: string, password: string) {
return this.afAuth.auth.signInWithEmailAndPassword(email, password)
.then((user) => {
this.authState = user
this.isLoggedIn()
})
.catch(error => {
console.log(error)
throw error
});
}
isLoggedIn() {
this.afAuth.auth.onAuthStateChanged(auth => {
if (auth) {
console.log(auth);
} else {
console.log('User logged out');
}
});
}
(这是一种常见的方式吗?有更好的方法吗?)
答案 0 :(得分:1)
auth状态将是持久的,因此刷新页面和仍然登录的同一用户是正常的。听起来你的问题是当你刷新页面时,无论是什么代码将用户打印到控制台没有被调用。函数isLoggedIn不应该从signInWithEmailAndPassword()返回的promise中调用,这实际上没有意义。如果signInWithEmailAndPassword()成功,onAuthStateChanged将发出一个新值,因此您应该在尝试登录用户之前调用isLoggedIn()。