AuthGuard:OnAuthStateChanged VS 在 Angular 5 + Firebase 中检查令牌
AuthGuard: OnAuthStateChanged VS check token in Angular 5 + Firebase
每次用户注册,执行以下代码:
this.router.navigate(['/']);
firebase.auth().currentUser.getToken()
.then(
(token: string) => this.token = token
)
getToken方法是这样定义的:
getToken() {
firebase.auth().currentUser.getToken()
.then(
(token: string) => this.token = token
);
return this.token;
}
我保存了令牌,因为我有一个用于检查用户是否拥有令牌的路由守卫:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.authService.isAuthenticated();
}
现在,我刚刚阅读了 Firebase 的文档,这是使用 onAuthStateChanged() 检查用户是否已登录的好习惯:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// No user is signed in.
}
});
那么,定义(有效)用户是否使用 Angular + Firebase 登录应用程序的最佳方法是什么?
我使用此功能来检查用户是否登录(使用 angularfire2,这很有帮助,因为它以 Angular 方式为您提供包装器到 firebase js sdk https://github.com/angular/angularfire2):
isLoggedIn(){
var promise = new Promise((resolve, reject) => {
this.afAuth.authState.subscribe(res => {
if (res && res.uid) {
console.log('user is logged in');
resolve(true);
} else {
console.log('user not logged in');
resolve(false);
}
});
});
return promise;
}
函数的使用方式如下:
this.auth.isLoggedIn().then(
(val) => {
if(val){
//Do your re-direct
}else{
//send alert or something
}
}
);
每次用户注册,执行以下代码:
this.router.navigate(['/']);
firebase.auth().currentUser.getToken()
.then(
(token: string) => this.token = token
)
getToken方法是这样定义的:
getToken() {
firebase.auth().currentUser.getToken()
.then(
(token: string) => this.token = token
);
return this.token;
}
我保存了令牌,因为我有一个用于检查用户是否拥有令牌的路由守卫:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.authService.isAuthenticated();
}
现在,我刚刚阅读了 Firebase 的文档,这是使用 onAuthStateChanged() 检查用户是否已登录的好习惯:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// No user is signed in.
}
});
那么,定义(有效)用户是否使用 Angular + Firebase 登录应用程序的最佳方法是什么?
我使用此功能来检查用户是否登录(使用 angularfire2,这很有帮助,因为它以 Angular 方式为您提供包装器到 firebase js sdk https://github.com/angular/angularfire2):
isLoggedIn(){
var promise = new Promise((resolve, reject) => {
this.afAuth.authState.subscribe(res => {
if (res && res.uid) {
console.log('user is logged in');
resolve(true);
} else {
console.log('user not logged in');
resolve(false);
}
});
});
return promise;
}
函数的使用方式如下:
this.auth.isLoggedIn().then(
(val) => {
if(val){
//Do your re-direct
}else{
//send alert or something
}
}
);