使用用户数据Angular2和Firebase重新发送到配置文件页面

时间:2016-09-30 00:23:34

标签: angular firebase firebase-authentication

我尝试在用户通过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>

1 个答案:

答案 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;
}
});

}