用户是否已登录? (Angularfire2)

时间:2017-07-20 02:23:07

标签: angular angularfire2

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

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

我用不同的方法编写了许多不同的方法来检查身份验证,但总是有相同的行为。

对Angular中的某些机制有所了解吗?如果用户登录后是否可以从登录页面重定向用户?

@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,
      });
  }
}

0 个答案:

没有答案