问题标签 [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.
angular - 如果用户从新选项卡输入 URL,则导航到特定页面
我已经建立了一个 loginPageGuard,如果它已经登录,它根本不会让用户登录页面。
假设用户开启
并试图去
http://localhost:4200/#/login
LoginPageGuard 按我的意愿工作,并且用户保持打开状态
问题是当用户登录并打开一个新选项卡并在浏览器中输入以下 URL
应用程序不让用户登录页面,而是转到
我想要的是带给用户
有没有办法做到这一点?谢谢
登录页面卫士
app.routing.ts
angular - CanActivate:转换 Observable> 到可观察的
我有一个只有所有者才能访问的用户设置页面。我想使用 CanActivate 来实现限制。CanActivate 要求输出为布尔值或布尔值的可观察值。但是,我的代码输出一个可观察的布尔值。
这是我的代码
javascript - 如何在加载组件 Angular 4 之前获得服务响应?
我有一个向 api 发出请求的服务,根据它的响应,我应该决定是否必须加载一个组件。但是由于接收响应花费了时间,组件加载而不考虑响应状态,并且在收到响应一段时间(大约 0.5 秒)后,如果必须不加载组件,我们导航到其他地方。我不希望在收到响应之前加载组件。
我在角度 4 中使用来自AuthGuard的canActivate函数,如下所示:
我正在使用setTimeout以便获得正确的this.router.url。
更新:
我添加了解析器,如下所示:
但组件仍然在响应数据接收之前加载......
javascript - Angular http.post 怎么会在没有 .subscribe 的情况下被调用?
查看从以下authguard
位置调用的内容canactivate
:
此代码正在运行,并向服务器调用 http 请求。
问题 :
这是一个冷的可观察.subscribe
的,没有人愿意接受它——所以我不明白这个post
请求是如何被调用的以及为什么。
subscribe
必须写恕我直言。
注意我已经
知道canactivate
可以返回bool
//Promise<bool>
Observable<bool>
angular - Angular 4 - CanActivate 检查组件正在路由
在 CanActivate 中有一种方法可以检查用户正在路由/请求哪个组件以进行身份验证。因此,我不想像下面那样检查 url,而是想做一些类似 if(route.component instanceof MyComponent) 的事情。
我正在实施基于角色的访问,能够将每个角色配置为对不同的组件具有不同的访问级别(查看、编辑等)。所以我认为最简单的事情是让当前组件成为路由,然后检查该组件的访问级别,而不是为每个组件创建不同的 AuthGard。
我试图通过检查 url 来做到这一点,但是当 url 中包含参数时它的大小写问题。
另一个问题:是否可以使用 Routes 配置中的参数调用 AuthGard,例如 { path: 'site/:id', component:SiteDetail,canActivate:[(callCustomeAuthGard('SiteDetailComponent')]
谢谢
angular - 如何使用 Angular 的 canActivate 来否定守卫的结果?
从 Angular 文档上看,如果函数最终返回canActivate
,您似乎只能使用canActivate
守卫来允许继续执行路由。canActivate
true
canActivate
有没有办法说,“只有在班级评估为”时才继续这条路线false
?
例如,为了不允许登录用户访问登录页面,我尝试了这个,但它不起作用:
我在控制台中收到此错误:
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 并且该路由已经过身份验证?是否有可能强制路由器调用警卫?
谢谢
angular - 错误:未捕获(承诺中):TypeError:守卫不是函数
我正在 Angular 4 中编写一个 Authguard 以防止在没有登录的情况下访问路由。但是,我收到此错误。下面是来自 Authgaurd 和 Routing in App 模块的代码。请帮助解决问题。
//验证码
//App模块中的路由
angular - 将数据从 Guard 传递到组件
我的子路由组件正在从 API 查询一些数据。目前,如果作为路由参数提供的 id 通过检查 API 返回的数据有效,我正在检查组件。
我认为这是一种不好的风格,并希望将检查放入一个警卫中,该警卫在组件被激活之前检查提供的参数是否有效。
但是,我也想节省时间和资源。这将需要两个 API 请求。因此我想知道是否有可能将数据从警卫传递到组件。我考虑过与路由参数一起传递,但canActivate
只提供一个ActivatedRouteSnapshot
只读的。
因此我的问题是:是否可以将数据从警卫传递到组件?或者在这种情况下是否有另一种(甚至更好的)方法来节省资源并防止多个 API 请求?