gpt4 book ai didi

javascript - 如何检查用户是否已通过身份验证以访问特定路径(MEAN STACK)

转载 作者:行者123 更新时间:2023-12-01 16:25:33 26 4
gpt4 key购买 nike

所以我正在学习 MEAN 堆栈,我正在尝试进行身份验证,我正在使用 passport-local、express-session、passport-mongoose,我不知道你是这样做的还是有更好的方法,我的 Node 上有一个 get,用于检查用户是否已通过身份验证。

exports.isLoggedIn = (req, res) => {
if (req.isAuthenticated()) {
res.send(true);
} else {
res.send(false);
}
}

在 Angular 上,我正在以这种方式使用 http get 进行身份验证服务

isLoggedIn(): Observable<boolean> {
return this.httpClient.get<boolean>(this.url + '/isLoggedIn', this.httpOptions).pipe(
retry(2),
catchError(this.handleError))
}

现在我的问题是,当用户尝试访问特定路径时,比方说“/profile”,我想用它来检查用户是否经过身份验证,所以在 Angular 防护中我正在这样做

isLoggedIn: boolean;

canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | boolean {

this.auth.isLoggedIn().subscribe((isLoggedIn: boolean) => {
this.isLoggedIn = isLoggedIn;
});

return this.isLoggedIn;

}

我认为,我面临的问题是 http 是异步的,而 canActivate on guard 是同步的,所以当我第一次运行它时,我得到了 undefined,第二次返回 true 和 false受人尊敬,但它来自上一次运行,因此如果用户注销,他仍然可以访问“/profile”路径。尝试了一些方法,都失败了,不知道是不是应该这样。

最佳答案

让我们把你的问题分成两部分

  1. 您还有其他方法,与护照库的用法大致相同。所以这已经足够好了,没有坏处。

  2. 在前端:

The guard might return its boolean answer synchronously. But in many cases, the guard can't produce an answer synchronously. The guard could ask the user a question, save changes to the server, or fetch fresh data. These are all asynchronous operations.

Accordingly, a routing guard can return an Observable or a Promise and the router will wait for the observable to 'resolve' to true or false.

引用自:https://angular.io/guide/router#milestone-5-route-guards

所以考虑到你在组件中的订阅,你需要返回你的可观察对象,像这样

return this.auth.isLoggedIn()

无需订阅。并可选择在您的服务中进行更改以返回 bool 值本身。类似

isLoggedIn(): Observable < boolean > {
return this.httpClient.get < boolean > (this.url + '/isLoggedIn', this.httpOptions)
.pipe(retry(2), tap(val => this.isLoggedIn = true), catchError(this.handleError))
}

有关解决登录服务的更多方法,请引用:https://angular.io/guide/router#resolve-pre-fetching-component-data

希望这对您有所帮助。

关于javascript - 如何检查用户是否已通过身份验证以访问特定路径(MEAN STACK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62274401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com