- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用例:我想将登录用户重定向到/dashboard,将未登录用户重定向到/landing。
先拍:
{
path: '**',
redirectTo: '/dashboard',
canActivate: [AuthGuard],
},
{
path: '**',
redirectTo: '/landing'
}
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private auth: AuthService, private router: Router) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean|UrlTree> | Promise<boolean|UrlTree> | boolean | UrlTree {
return this.auth.isAuthenticated$
}
}
所有用户都被重定向到仪表板页面。
第二次尝试:
{
path: '**',
redirectTo: '/home/loggedin',
canActivate: [AuthGuard],
data: { authGuard: { redirect: '/home/loggedout' } }
},
{
path: '**',
redirectTo: '/home/loggedin'
}
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private auth: AuthService, private router: Router) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean|UrlTree> | Promise<boolean|UrlTree> | boolean | UrlTree {
return this.auth.isAuthenticated$.pipe(
map(loggedIn => {
console.log(`A=${loggedIn} ${JSON.stringify(next.data.authGuard.redirect)}`)
if (!loggedIn && next.data.authGuard.redirect) {
return this.router.parseUrl(next.data.authGuard.redirect);
} else {
return false;
}
})
);
}
}
似乎甚至没有调用 AuthGuard。可能如果我使用组件而不是重定向?
{
path: '**',
component: RedirectingComponent,
canActivate: [AuthGuard],
data: { authGuard: { redirect: '/home/loggedout' }, redirectComponent: { redirect: '/home/loggedin' } }
}
现在这似乎可行,但它也是一个糟糕的 hack。
如何使 AuthGuards 与重定向一起工作?
最佳答案
您的AuthGuard
可以强制导航。在您的第一次尝试中,将守卫更改为如下内容:
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private auth: AuthService, private router: Router) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean|UrlTree> | Promise<boolean|UrlTree> | boolean | UrlTree {
// if user is authenticated just return true;
if (this.auth.isAuthenticated$) { return true; }
// if user is not authenticated redirect the user and return false
this.router.navigate(['/landing']);
return false;
}
}
这会将未经身份验证的用户重定向到登录页面。您还可以查看 Angular 文档中的示例 here .
关于Angular 9 Router - CanActivate 不适用于重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60669468/
你好,我是 Angular 6 的新手,我遇到了一个关于提取用户的身份验证问题,如果没有登录就不会进入任何页面,我面临的问题是 Class 'NeedAuthGuard' incorrectly im
我写了一个 angular 4.3.0 typescript 库。在构建我的库时,我在 *.d.ts 文件中看到以下错误。 ERROR in [at-loader] ..\myLibrary\lib-
下面是我在 TypeScript 中实现 CanActivate 保护子句,当我编译这段代码时,它显示如下错误 A function whose declared type is neither 'v
我有这个 AuthGuard。在这段代码中,我想创建一个条件。如果我的 resetpasss 不为空,我想在此处的 ResetPassIdComponent 中导航,否则我想在 LoginFirstC
据我了解CanActivate Angular2 中的接口(interface)仅对路由更改有效。因此,如果我有一个要求用户登录的页面 p,我可以创建一个实现 CanActivate 接口(inter
我的路由器中有这些线路: .. canActivate: [MyGuard], path: "search", component: SearchComponent,
我有以下问题。我制作了一个 CanActivate Guard,如果您已登录,您可以“转到”债务组件。我的问题是,当我登录时,我想将用户重定向到债务组件(因为 RegistrationComponen
我正在使用 Observable返回 canActivate() .为测试设置了以下功能,它正确解析,组件显示。 canActivate(route: ActivatedRouteSnapshot,
最近,我一直在思考我正在开发的应用程序的安全性。客户端基于 Angular 构建,后端为 Rails API。据我所知,普遍的共识是,如果它在客户端,假设它可以被破坏。所以这让我想知道我何时以及是否应
我最近被 Angular 路由守卫卡住了。 CanActive 仅在页面加载时运行一次,并且不会在 protected 路由内的路由更改时运行。我认为这已更改,因为它过去常常在每次更改时运行。根据我在
我有这样的路线设置: export const APP_ROUTES: Routes = [ { path: '', resolve: {
我已经为我的 Angular 5.2 应用程序实现了 CanActivate 路由保护。如果它返回 true,则 URL 不会更改,但当它返回 false 时,URL 会更改并将路径附加到 URL。在
使用守卫,我尝试访问服务 但我无法在 canActivate 中返回一个 promise (它具有我无法更改的特定签名) 我的 autService 返回一个 promise ,因为它是异步的 我怎样
我有这样的路线: [ { path: ':orgName', children: [ { path: '', component: Ho
我有这样的路线: [ { path: ':orgName', children: [ { path: '', component: Ho
我有一个路径列表,我想将 CanActivate 应用于除某些路径之外的所有路径。是否有任何 Angular 丢弃某些路径的方法。目前我正在将 canActivate 应用到所有的 URL。如果有很多
I'm loading a books module with the following routing configuration (src/app/index.ts) -- 请注意,这是一个 s
我正在尝试在我的应用程序路由上使用 canActivate 功能,但是每当我编译该应用程序时,日志都会显示不断刷新的失败消息,我已将 console.log() 用于可见性。 我在这里遗漏了什么吗?
我有一个以这种方式使用惰性模块的应用程序: export const routes: Routes = [ { path: '', component: WelcomeCompon
我有一个关于 CanActivate 的问题 import { AuthService } from './auth.service'; import { CanActivate } from '@a
我是一名优秀的程序员,十分优秀!