如何检查用户是不是经过身份验证以访问特定路径(MEAN STACK)

     2023-03-07     190

关键词:

【中文标题】如何检查用户是不是经过身份验证以访问特定路径(MEAN STACK)【英文标题】:How to check if a user is authenticated to acess certain path (MEAN STACK)如何检查用户是否经过身份验证以访问特定路径(MEAN STACK) 【发布时间】: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();不要订阅。 【参考方案1】:

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

    您还有其他方法,或多或少与护照库的使用相同。所以它已经足够好了,没有什么坏处。

    在前端:

守卫可能会同步返回其布尔值答案。但在许多 在这种情况下,守卫不能同步产生答案。守卫 可以向用户提问,将更改保存到服务器,或获取 新鲜的数据。这些都是异步操作。

因此,路由守卫可以返回 Observable 或 承诺和路由器将等待可观察到 'resolve' 为真或假。

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

所以考虑到你在组件中的订阅,你需要返回你的 observable,像这样

return this.auth.isLoggedIn()

无需订阅。并且可以选择在您的服务中进行更改以返回布尔值本身。像

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

希望这会有所帮助。

【讨论】:

如何检查用户是不是在 Firebase 和 Express/Node.js 中经过身份验证?

】如何检查用户是不是在Firebase和Express/Node.js中经过身份验证?【英文标题】:HowtocheckifuserisauthenticatedinFirebaseandExpress/Node.js?如何检查用户是否在Firebase和Express/Node.js中经过身份验证?【发布时间】:2018-11-1114:47:05【问题描述】... 查看详情

检查用户是不是在 OpenFire 中经过身份验证

】检查用户是不是在OpenFire中经过身份验证【英文标题】:CheckifUserisAuthenticatedinOpenFire检查用户是否在OpenFire中经过身份验证【发布时间】:2015-06-2214:02:29【问题描述】:如何检查接收者用户当前是否经过身份验证?截取数据包... 查看详情

如何从 FormRequest 类方法中访问当前经过身份验证的用户

】如何从FormRequest类方法中访问当前经过身份验证的用户【英文标题】:HowtoaccesscurrentauthenticateduserfromwithinFormRequestclassmethod【发布时间】:2015-07-1007:41:56【问题描述】:我有一个用户模型,它有两个功能来检查用户的性别。对于... 查看详情

如何检查用户是不是在 .Net Core 2.0 的 Razor 页面中经过身份验证

】如何检查用户是不是在.NetCore2.0的Razor页面中经过身份验证【英文标题】:HowtocheckifuserisauthenticatedinRazorpagesof.NetCore2.0如何检查用户是否在.NetCore2.0的Razor页面中经过身份验证【发布时间】:2018-02-0321:50:10【问题描述】:我想检... 查看详情

如何在mvc中检查请求是不是经过身份验证?

】如何在mvc中检查请求是不是经过身份验证?【英文标题】:Howtocheckwhetherrequestisauthenticatedornotinmvc?如何在mvc中检查请求是否经过身份验证?【发布时间】:2016-07-0905:45:17【问题描述】:我正在实现一个MVC应用程序,并且使用活... 查看详情

如何在 Laravel 和 Vue.js 中使用 jwt-auth 检查用户是不是经过身份验证

】如何在Laravel和Vue.js中使用jwt-auth检查用户是不是经过身份验证【英文标题】:Howtocheckwhetheruserisauthenticatedornotusingjwt-authinLaravelandVue.js如何在Laravel和Vue.js中使用jwt-auth检查用户是否经过身份验证【发布时间】:2018-07-2212:20:16【问... 查看详情

如何只允许经过身份验证(登录)的用户访问 Spring RESTful 服务

】如何只允许经过身份验证(登录)的用户访问SpringRESTful服务【英文标题】:Howtoonlyallowauthenticated(loggedin)userstoaccessSpringrestfulservice【发布时间】:2017-04-2307:44:58【问题描述】:web项目的架构如下:有一个SpringMVCRESTfulWeb服务运行... 查看详情

以经过身份验证的用户身份打开文件

...thenticatedUser【发布时间】:2013-02-2121:16:46【问题描述】:如何以运行浏览器的用户(User.Identity.Name)而不是服务器上的本地网络帐户打开文件(System.IO.FileStream)?请求:如果适用,使用适当的术语编辑帖子。【问题讨论】:【参考方... 查看详情

检查用户是不是仍在 angularfire2 中通过身份验证

】检查用户是不是仍在angularfire2中通过身份验证【英文标题】:Checkingifuserisstillauthenticatedinangularfire2检查用户是否仍在angularfire2中通过身份验证【发布时间】:2017-09-1109:08:37【问题描述】:我有一个使用angularfire2的有效身份验证... 查看详情

如何在 https 云功能中检查身份验证? [复制]

】如何在https云功能中检查身份验证?[复制]【英文标题】:Howtocheckauthinhttpscloudfunction?[duplicate]【发布时间】:2017-08-1610:02:18【问题描述】:我正在尝试确定是否可以从调用firebasehttps云功能的客户端检查身份验证对象以完成以下... 查看详情

属于经过身份验证的用户的嵌套资源的 REST 路径命名约定是啥?

】属于经过身份验证的用户的嵌套资源的REST路径命名约定是啥?【英文标题】:WhatistheRESTpathnamingconventiontoanestedresourcethatbelongstotheauthenticateduser?属于经过身份验证的用户的嵌套资源的REST路径命名约定是什么?【发布时间】:2021... 查看详情

如何通过经过身份验证的 cognito 用户(用户池)快速访问 DynamoDB

】如何通过经过身份验证的cognito用户(用户池)快速访问DynamoDB【英文标题】:HowtoaccessDynamoDBbyauthenticatedcognitouser(userpool)inswift【发布时间】:2016-10-2510:59:41【问题描述】:我正在尝试将AWSCognito(用户池)和AWSDynamoDB用于我的移... 查看详情

服务器配置为将传递身份验证和内置帐户一起使用,以访问指定的物理路径。

...的“基本设置”—“连接为”,默认的是选中“应用程序用户”,你选中上面的“特定用户”,然后点右边的“设置”,用户名密码就用你系统的用户名和密码,而且你这个账号有网站目录的权限。参考技术A实际上这个就是验... 查看详情

仅针对特定用户的 SSH 身份验证绕过密码身份验证

...到其他服务器的bash脚本,以进行一些基本的监控,例如检查磁盘空间并通过电子邮件发送此信息。我仍然需要所有这些服务器都需要用户一般进入/访问的密码,但是对于这个特定的监控脚本,我 查看详情

在 Blazor 中的视图之外访问经过身份验证的用户

】在Blazor中的视图之外访问经过身份验证的用户【英文标题】:AccessinganauthenticateduseroutsideofaviewinBlazor【发布时间】:2020-05-0119:17:03【问题描述】:在我的服务器端Blazor应用程序中,身份验证是以非常规的方式处理的。本质上,... 查看详情

NestJS - 如何检查 JWT 是不是可以访问特定端点

】NestJS-如何检查JWT是不是可以访问特定端点【英文标题】:NestJS-howtocheckifJWTcanaccessspecificendpointNestJS-如何检查JWT是否可以访问特定端点【发布时间】:2021-01-2705:37:45【问题描述】:假设我有3个端点:A用于生成JWT令牌,B用于访... 查看详情

如何检查该用户是不是已通过来自美味派的身份验证?

】如何检查该用户是不是已通过来自美味派的身份验证?【英文标题】:HowdoIcheckthatuseralreadyauthenticatedfromtastypie?如何检查该用户是否已通过来自美味派的身份验证?【发布时间】:2011-11-1321:00:54【问题描述】:当用户在Django中... 查看详情

laravel 4.2 如何检查是不是有用户登录多重身份验证

】laravel4.2如何检查是不是有用户登录多重身份验证【英文标题】:laravel4.2Howtocheckwhetheranyuserisloggedinmultiauthlaravel4.2如何检查是否有用户登录多重身份验证【发布时间】:2015-09-1116:33:21【问题描述】:我在Laravel4.2中使用multiauth和... 查看详情