AuthGuard и RedirectTo не работают для root пути - PullRequest
0 голосов
/ 26 апреля 2020

Я работаю над angular приложением, которое имеет следующие URL-пути ,

  • / (root)
  • / курсы
  • / курсы / создать
  • / курсы /: id
  • / auth / login

Я добавил AuthGuard для всех маршруты кроме auth/login. AuthGuard перенаправляет на auth\login, если не аутентифицирован.


app-routing.module.ts

export const Approutes: Routes = [
  {
    path: '',
    canActivate: [AuthGuard],
    component: FullComponent,
    loadChildren: () => import('./pages/pages.module').then(m => m.PagesModule) // loading from pages-routing.ts
  },
  {
    path: 'auth',
    component: PlainComponent,
    children: [
      {
        path: '',
        pathMatch: 'full',
        redirectTo: 'login'
      },
      {
        path: 'login',
        component: LoginComponent
      }
    ]
  },
  {
    path: '**',
    redirectTo: ''
  }
];

pages-routing.ts

export const PagesRoutes: Routes = [
    {
        path: '',
        children: [
            {
                path: '',
                pathMatch: 'full',
                redirectTo: 'courses'
            },
            {
                path: 'courses',
                component: CourseMainPageComponent,
                data: {
                    title: 'My Courses'
                }
            },
            {
                path: 'courses/create',
                component: CourseCreatePageComponent,
                data: {
                    title: 'Create Course'
                }
            },
            {
                path: 'courses/:id',
                component: CourseShowPageComponent,
                data: {
                    title: 'Course Detail'
                }
            },
        ]
    }
];

Проблема

Все маршруты и authGuard работает нормально. Но , когда я ввожу root URL \, мне нужно было перенаправить на \courses, но он не работает. Также в root URL \ AuthGuard не перенаправляет me на auth\login даже.

ПРИМЕЧАНИЕ Не знаю не возникает ошибка во время выполнения или компиляции.

1 Ответ

1 голос
/ 26 апреля 2020

Вам нужно изменить стратегию pathMatch на full в маршруте, который вы используете для перенаправления. Согласно документам,

Стратегия соответствия пути 'full' соответствует целому URL. Это важно делать при перенаправлении маршрутов с пустым путем. В противном случае, поскольку пустой путь является префиксом любого URL-адреса, маршрутизатор будет применять перенаправление даже при переходе к месту назначения перенаправления, создавая бесконечное значение l oop.

. Теперь ваша конфигурация маршрута будет выглядеть вот так

export const PagesRoutes: Routes = [{
    path: '',
    children: [{
        path: '',
        redirectTo: 'courses',
        pathMatch: 'full'
    },
    // Add other routes here
    ]
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...