问题标签 [canactivate]

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 回答
127 浏览

angular - 如果用户从新选项卡输入 URL,则导航到特定页面

我已经建立了一个 loginPageGuard,如果它已经登录,它根本不会让用户登录页面。

假设用户开启

并试图去 http://localhost:4200/#/login

LoginPageGuard 按我的意愿工作,并且用户保持打开状态

问题是当用户登录并打开一个新选项卡并在浏览器中输入以下 URL

应用程序不让用户登录页面,而是转到

我想要的是带给用户

有没有办法做到这一点?谢谢

登录页面卫士

app.routing.ts

0 投票
1 回答
663 浏览

angular - CanActivate:转换 Observable> 到可观察的

我有一个只有所有者才能访问的用户设置页面。我想使用 CanActivate 来实现限制。CanActivate 要求输出为布尔值或布尔值的可观察值。但是,我的代码输出一个可观察的布尔值。

这是我的代码

0 投票
1 回答
2009 浏览

angular - 无法解析 AuthGuard 的所有参数

我有这个AuthGuard

我已经在我的AppModule

我试图在我的路由模块中使用这个守卫,如下所示:

我得到这个错误:

在此处输入图像描述

我错过了什么?这个错误的根源在哪里?

编辑: 我正在使用 Angular 4.4.6

当我使用基本路由保护并更新路由配置时,它工作正常:

**我的 tsconfig.json:**

0 投票
1 回答
2102 浏览

javascript - 如何在加载组件 Angular 4 之前获得服务响应?

我有一个向 api 发出请求的服务,根据它的响应,我应该决定是否必须加载一个组件。但是由于接收响应花费了时间,组件加载而不考虑响应状态,并且在收到响应一段时间(大约 0.5 秒)后,如果必须不加载组件,我们导航到其他地方。我不希望在收到响应之前加载组件。

我在角度 4 中使用来自AuthGuard的canActivate函数,如下所示:

我正在使用setTimeout以便获得正确的this.router.url

更新:

我添加了解析器,如下所示:

但组件仍然在响应数据接收之前加载......

0 投票
1 回答
45 浏览

javascript - Angular http.post 怎么会在没有 .subscribe 的情况下被调用?

查看从以下authguard位置调用的内容canactivate

此代码正在运行,并向服务器调用 http 请求。

问题 :

这是一个的可观察.subscribe的,没有人愿意接受它——所以我不明白这个post请求是如何被调用的以及为什么。
subscribe必须写恕我直言。

注意我已经
知道canactivate可以返回bool//Promise<bool>Observable<bool>

0 投票
3 回答
2095 浏览

angular - Angular 4 - CanActivate 检查组件正在路由

在 CanActivate 中有一种方法可以检查用户正在路由/请求哪个组件以进行身份​​验证。因此,我不想像下面那样检查 url,而是想做一些类似 if(route.component instanceof MyComponent) 的事情。

我正在实施基于角色的访问,能够将每个角色配置为对不同的组件具有不同的访问级别(查看、编辑等)。所以我认为最简单的事情是让当前组件成为路由,然后检查该组件的访问级别,而不是为每个组件创建不同的 AuthGard。

我试图通过检查 url 来做到这一点,但是当 url 中包含参数时它的大小写问题。

另一个问题:是否可以使用 Routes 配置中的参数调用 AuthGard,例如 { path: 'site/:id', component:SiteDetail,canActivate:[(callCustomeAuthGard('SiteDetailComponent')]

谢谢

0 投票
3 回答
6813 浏览

angular - 如何使用 Angular 的 canActivate 来否定守卫的结果?

从 Angular 文档上看,如果函数最终返回canActivate,您似乎只能使用canActivate守卫来允许继续执行路由。canActivatetrue

canActivate有没有办法说,“只有在班级评估为”时才继续这条路线false

例如,为了不允许登录用户访问登录页面,我尝试了这个,但它不起作用:

我在控制台中收到此错误:

0 投票
1 回答
795 浏览

angular - 角度 4 路由器 auth-guard 未在同一路由上调用

嗨我配置了这个路由:

我不想照顾登录页面的名称,如果那是将来注销后的目标页面。因此,注销完成后,注销组件将重定向到起始页。

目前,没有起始页组件(稍后,可能会有仪表板),但如果您通过了身份验证,则会重定向到“buchbestellungen”路由。如果您没有登录,访问起始页会重定向到 /buchbestellungen,而 auth-guard 服务会重定向到登录路径。

这适用于每条路线(例如 buchbestellungen2),但不是,当我在 /buchbestellungen 上注销时。这将重定向到“/”,然后返回到 buchbestellungen。但是 auth-guard 没有被调用(我在 canActivate() 方法中有一个 Console.log() ,但它也没有被调用)。

示例 1: buchbestellungen2 -> logout() -> 重定向到 / -> 重定向到 /buchbestellungen 被 auth-guard 拦截 i 结束于 /login 路由

示例 2: buchbestellungen -> logout() -> 重定向到 / -> 重定向到 /buchbestellungen(没有 auth-guard 并且没有重定向到 /login)

路由器是否有可能不调用 auth-guard,因为我来自 /buchbestellungen 并且该路由已经过身份验证?是否有可能强制路由器调用警卫?

谢谢

0 投票
2 回答
8743 浏览

angular - 错误:未捕获(承诺中):TypeError:守卫不是函数

我正在 Angular 4 中编写一个 Authguard 以防止在没有登录的情况下访问路由。但是,我收到此错误。下面是来自 Authgaurd 和 Routing in App 模块的代码。请帮助解决问题。

//验证码

//App模块中的路由

0 投票
2 回答
6092 浏览

angular - 将数据从 Guard 传递到组件

我的子路由组件正在从 API 查询一些数据。目前,如果作为路由参数提供的 id 通过检查 API 返回的数据有效,我正在检查组件。

我认为这是一种不好的风格,并希望将检查放入一个警卫中,该警卫在组件被激活之前检查提供的参数是否有效。

但是,我也想节省时间和资源。这将需要两个 API 请求。因此我想知道是否有可能将数据从警卫传递到组件。我考虑过与路由参数一起传递,但canActivate只提供一个ActivatedRouteSnapshot只读的。

因此我的问题是:是否可以将数据从警卫传递到组件?或者在这种情况下是否有另一种(甚至更好的)方法来节省资源并防止多个 API 请求?