【发布时间】:2020-09-28 03:30:53
【问题描述】:
所以我正在学习 MEAN 堆栈,并且我正在尝试进行身份验证,我正在使用本地护照、快速会话、护照猫鼬,我不知道这是你这样做的方式还是有更好的方式,我的节点上有一个 get 来检查用户是否经过身份验证。
exports.isLoggedIn = (req, res) => {
if (req.isAuthenticated()) {
res.send(true);
} else {
res.send(false);
}
}
在角度上,我正在以这种方式使用 http 获取身份验证服务
isLoggedIn(): Observable<boolean> {
return this.httpClient.get<boolean>(this.url + '/isLoggedIn', this.httpOptions).pipe(
retry(2),
catchError(this.handleError))
}
现在我的问题是,当用户尝试访问某个路径时,比如说“/profile”,我想用它来检查用户是否经过身份验证,所以在角度防护中我正在这样做
isLoggedIn: boolean;
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | boolean {
this.auth.isLoggedIn().subscribe((isLoggedIn: boolean) => {
this.isLoggedIn = isLoggedIn;
});
return this.isLoggedIn;
}
我认为,我面临的问题是 http 是异步的,而 canActivate 是同步的,所以当我第一次运行它时,我没有定义,第二次返回 true 和 false 为值得关注,但它来自上一次运行,因此如果用户注销,他仍然可以访问“/profile”路径。尝试了一些方法,都失败了,不知道是不是应该这样。
【问题讨论】:
-
返回 this.auth.isLoggedIn();不要订阅。
标签: javascript node.js angular mean-stack