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