我尝试在用户通过Firebase登录后设置个人资料页面路由。我的signin
组件包含profile
路径的路径。这里唯一的问题是我的个人资料组件包含来自Firebase数据库的用户数据。因此,当我被重定向到我的个人资料页面时,我收到Cannot read property 'uid' of null
的错误。
如果我在登录后刷新页面,那么我的个人资料页面就会出现错误。
我的 signin.component.ts
signInSubmit(){
var self = this;
firebase.auth().signInWithEmailAndPassword(self.signInForm.value.smail, self.signInForm.value.spassword).catch(function(error){
console.log(error.message);
});
localStorage.setItem('confirmo', 'verdad');
self.router.navigate(['profile']);
}
我的 profile.component.ts
ngOnInit(){
var self = this;
let user = firebase.auth().currentUser;
let userNamePath = `users/${user.uid}/username`;
let notesPath = `users/${user.uid}/addnote`;
this.username$ = this.af.database.object(userNamePath);
this.addsnotes$ = this.af.database.list(notesPath);
function redis(){
self.proshow = true; }
setTimeout(redis, 3000);
}
为了尝试解决此问题,我在显示配置文件组件之前设置了超时。但是,这不起作用。即使我将整个ngOnInit
置于超时功能中,也会显示相同的错误。
此外,我的 profile.component.html 的一部分如果有帮助。
<h4>Welcome {{ (username$ | async)?.$value }}</h4>
答案 0 :(得分:0)
答案结果证明是全能的onAuthStateChanged。像这样:
<强> profile.component.ts 强>
ngOnInit(){
var self = this;
firebase.auth().onAuthStateChanged(function(user){
if (user){
var userNamePath = `users/${user.uid}/username`;
var notesPath = `users/${user.uid}/addnote`;
self.username$ = self.af.database.object(userNamePath);
self.addsnotes$ = self.af.database.list(notesPath);
self.proshow = true;
}
});
}