1

我正在尝试使用 Angular 路由器,但在空路径上遇到问题。这是我的路线:

const routes: Routes = [

    { path: 'feed', loadChildren: './feed/feed.module#FeedModule', canLoad: [AuthGuardService] },
    { path: 'login', component: LoginPage },
    { path: 'register', component: RegisterPage },
    { path: '', redirectTo: '/feed', pathMatch: 'full' },
    { path: '**', redirectTo: '/' }
];

我的 AuthGuardService 有一个 canLoad 方法,它总是返回 false 并重定向到 '/login' 路径:

...
@Injectable()
export class AuthGuardService implements CanLoad {
  constructor(private router: Router) {
  }
  canLoad(route: Route): boolean {

    this.router.navigate([ '/login' ]);
    return false;
  }
}

当我转到“localhost:4200/feed”时,我被重定向到“/login”。

但是,如果我转到 'localhost:4200/',则忽略身份验证保护并显示我的提要模块的组件。

你知道为什么吗?

谢谢 !

4

2 回答 2

0

我的场景中有一个工作代码。检查这个,如果它可以帮助你。

您可以使用 canActivate 代替 canLoad。

canActivate用于防止未经授权的用户
canLoad用于防止应用程序的整个模块

在下面的示例中,如果您希望使用 canLoad 代替,可以将canActivate替换为canLoad 。

import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';

@Injectable()
export class AuthGuard implements CanActivate {

    constructor(private router: Router) { }

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        if (localStorage.getItem('currentUser')) {
            // logged in so return true
            return true;
        }

        // not logged in so redirect to login page with the return url
        this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
        return false;
    }
}

在编写路线时,您可以定义如下。

{ path: 'newLeaveRequest', component: NewLeaveRequestComponent, canActivate: [AuthGuard]},
{ path: 'pastLeaveRequests', component: PastLeaveRequestComponent, canActivate: [AuthGuard]},

在 app.module.ts 中定义 provider 中的 AuthGuard。

于 2018-08-01T04:44:41.063 回答
0

我已经解决了我的问题,抱歉耽搁了:我需要使用一个组件并使用 canActivate 来加载子模块

{
    path: 'feed',
    canActivate: [ AuthGuard ],
    component: FeedComponent,
    children: [
        {
      path: '',
      loadChildren: () => FeedModule
}]}

儿童延迟加载也有效!

干杯!

于 2018-08-24T21:45:01.093 回答