Angular 用户是否已登录?(角火2)

Angular 用户是否已登录?(角火2),angular,angularfire2,Angular,Angularfire2,我用的是角的。Firebase用于处理身份验证。使用Angularfire2库。 我的目标是检查用户是否已登录,以及是否已将其重定向到其他页面。要检查用户是否登录,我使用的是authenticated()方法。我在构造函数中调用它三次,然后单击按钮中的事件。我已登录,返回登录页面,我得到: false; // <-- authenticated() from constructor false; // <-- authenticated() from ngOnInit true; /

我用的是角的。Firebase用于处理身份验证。使用Angularfire2库。 我的目标是检查用户是否已登录,以及是否已将其重定向到其他页面。要检查用户是否登录,我使用的是authenticated()方法。我在构造函数中调用它三次,然后单击按钮中的事件。我已登录,返回登录页面,我得到:

false; // <-- authenticated() from constructor
false; // <-- authenticated() from ngOnInit
true; // <-- authenticated() after I pressed the button

路由守卫可以保护路由:如果这是您正在寻找的,则除非用户登录,否则不重定向。路由守卫可以保护路由:如果这是您正在寻找的,则除非用户登录,否则不重定向。
@Component({
  selector: 'login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})

export class LoginComponent implements OnInit {
  email: string;
  password: string;
  private user: firebase.User;

  constructor(
    private angularFireAuth: AngularFireAuth,
    private router: Router,
    public snackBar: MdSnackBar,
  ) {
    this.user = angularFireAuth.auth.currentUser;
    this.authenticated();
  }

  ngOnInit(): void {
    this.authenticated();
  }

  login() {
    this.angularFireAuth.auth
      .signInWithEmailAndPassword(this.email, this.password)
      .then((u: firebase.User) => { this.router.navigate(['', u.uid]) })
      .catch((a: Error) => { this.openSnackBar(a) });
  }

  authenticated() {
    new Promise((resolve, reject) => {
      var user = this.angularFireAuth.auth.currentUser
      if (user == null) {
        resolve(null);
      } else {
        reject(user);
      }
    }).then(
      (data) => { null; console.log(false); },
      (user) => { user; console.log(true); });
  }

  openSnackBar(a: Error) {
    this.snackBar.open(a.message, "Okay",
      {
        duration: 5000,
      });
  }
}