问题标签 [auth-guard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
79 浏览

angular - 为什么不能在 canActivate 方法的 catch 块中返回 Observable.of(false)?

我使用 canActivate 功能来保护一些路由(管理员)。对于这种情况,我确实使用了authGuard类/函数:

问题是,当我尝试将 boolean 的可观察值返回为:return Observable.of(false);时,它无法按预期工作并引发以下错误:

'(err: any) => Observable | 类型的参数 Observable' 不能分配给类型为“(错误:任何,捕获:Observable)=> ObservableInput”的参数。输入“可观察 | Observable' 不可分配给类型 'ObservableInput'。类型“Observable”不可分配给类型“ObservableInput”。类型“Observable”不可分配给类型“ArrayLike”。“可观察”类型中缺少属性“长度”。

我一直在搜索并发现这种问题,但不完全相同。并且提供的提示/解决方案是使用.throw(err);

当我将 return 更改为:return Observable.throw(err);时,错误消失了,但为了保护我的路线,它没有false按应有的方式返回。

我相信这是一个类型问题等,但我无法修复它,所以我不断返回observable.of(false)

user.service.ts中的函数:

另一方面,如果我将refreshToken功能更改为:

然后错误说:

src/app/admin.guard.ts(38,9) 中的错误:错误 TS2322:类型 'Observable' 不可分配给类型 'boolean | 承诺 | 可观察”。类型“Observable”不可分配给类型“Observable”。输入'布尔| {}' 不可分配给类型 'boolean'。类型“{}”不可分配给类型“布尔”。src/app/service.guard.ts: 错误 TS2339: 属性 'map' 不存在于类型 '(err: any) => boolean' 上。

0 投票
2 回答
1429 浏览

angular - Angular 6 - 基于角色/声明的身份验证防护不起作用

我的应用程序中经过身份验证的用户可以有多个角色,因此,我想根据用户的特定角色来保护路由。checkAuthentication()我在方法中包含角色检查AuthGuardService,然后data: { roles: ['USER'] }在路由模块中应用。我还设置identity了存储来检测AuthService. 但是,当我尝试登录时,它不会路由到仪表板,而是停留在登录页面,即使我可以看到本地存储中设置的令牌。

路由模块:

身份验证服务:

身份验证服务:

0 投票
0 回答
545 浏览

angular - Angular 6:转移 isAdmin?从 AuthService 到 AuthGuard canActivate() 方法的值

Angular 6 和 Firestore 应用程序。

我正在尝试使用返回布尔值AuthGuard的方法构建服务。canActivate()布尔值基于一个UserAuthService名为 的属性isAdmin

问题是canActivate()在我UserAuthService有时间为属性赋值之前执行isAdmin。因此isAdmin返回为undefined

我尝试过使用subscribeand .map.pipe(map => ())但都无济于事。我知道我做错了什么,但我无法确定是什么。

有没有办法强制canActivate()等到isAdmin被赋值?

这是代码。

AuthGuard服务:

UserAuthService

0 投票
1 回答
1037 浏览

angular - 为什么 .map 运算符在没有 .pipe (Angular + Angularfire2/auth) 的情况下无法工作?

我已经在调用 AngularFireAuth 的 authState 方法的路由之一中实现了一个 Auth 保护。

我已经看到很多像下面这样授予访问权限的示例:

但是当我尝试按原样复制它时,我收到以下错误:'...Property 'map' doesn't exist on type 'Observable'。

但是当我包含 .pipe 时,它​​按预期工作:

也许我应该对它的工作方式感到满意,但我不明白为什么这里需要管道。任何人都会有几分钟的时间向我解释这一点?

非常感谢 !纳内克斯

0 投票
2 回答
1673 浏览

angular - 如果 canLoad 或 canActivate 失败,我如何路由登录,而不在 AuthGuard 本身中路由?

所以,这就是我的 AuthGuard 的样子:

我从 app.component 检查身份验证信息并简单地返回一个 Observable 布尔值。

我不想订阅这个来重新路由,我不想在 AuthGuard 中使用 router.navigate,所以我想保持它是一个简单的 Guard。

有没有办法在路由模块内部重新路由,如果 AuthGuard 返回 false,它只是路由到备用路径?

0 投票
1 回答
213 浏览

angular - 当我登录时如何设置超时并离开该路线?

这是功能:

我认为在 res 中我必须设置超时。我有 authGuard,这就是我需要超时的原因。

0 投票
0 回答
1028 浏览

angular - 以编程方式触发身份验证保护

是否可以在组件内触发AuthGuard

这样做的目的是,如果某些逻辑失败,那么它会触发保存逻辑的AuthGuard位置AuthGuard来导航用户,直到他们完成了该页面中给出的任务。

0 投票
0 回答
548 浏览

angular - Uncaught (in promise): TypeError: guard is not a function - when Class extends another Class

我在下面的相同配置在一天之前工作正常,并且在我的机器上不再工作。我检查了其他机器,它在这些机器上仍然可以正常工作。这就是我正在做的事情。

应用路由:

UserConfig 服务:(如您所见,它扩展了 DataProviderService)

数据提供者:

如错误所示,对于 UserConfigsService,防护设置为未实现 canActivate 的 DataProvideService。 错误截图

问题:

  1. 这个配置正确还是我遗漏了什么?

  2. 不明白为什么相同的配置可以在我的其他机器上运行?

  3. 有什么我应该尝试不同的吗?

更新:

进一步深入研究后,我发现每次注入 UserConfigsService 时,都会返回 DataProviderService 对象。我不确定为什么。

AppComponent 请求 UserConfigsService 但获得 DataProviderService。

复制 GitHub 链接

0 投票
0 回答
126 浏览

angular - angular ngrx/store authguard 用户属性未定义问题

我正在构建一个使用 ngrx/store 进行状态管理的 Angular 应用程序,它有一个用户对象作为状态的一部分。

用户类

身份验证:

但在 authguard 类中, user.is_signed_in 属性未定义。为什么?

0 投票
1 回答
33 浏览

angular - Angular AuthGuard 的重定向问题

如果用户在访问我的网站的基本 URL 时已经在平台上登录(我使用 cookie 检查),我会尝试将用户重定向到某个路线。预期的行为是这样的:

  • 用户去www.example.com
  • 如果他已经登录,请重定向到www.example.com/my-account
  • 如果没有,请转到www.example.com

我尝试将 CanActivate 与以下代码一起使用:

问题是如果用户没有登录,它会显示一个白页,因为组件不会加载。

关于如何实现这一目标的任何想法?

谢谢。