Angular продолжает перенаправлять меня на страницу входа, хотя я пытаюсь получить доступ к другой странице - PullRequest
0 голосов
/ 14 мая 2019

У меня есть веб-сайт, который разделен на обычные страницы, к которым пользователь может получить доступ, и еще одну страницу, к которой он доступен только администраторам (это ngx-admin ).

Таким образом, чтобы заблокировать пользователям возможность доступа к панели администратора, я настроил аутентификацию, которая перенаправляет пользователя на страницу входа в систему, и если у них неправильные учетные данные, он перенаправляет их на домашнюю страницу сайта, но для по какой-то причине, когда я пытаюсь получить доступ к домашней странице или что-то еще, меня всегда перенаправляют на страницу входа.

Вот мой модуль маршрутизации приложений:

import { ExtraOptions, RouterModule, Routes } from '@angular/router';
import { NgModule } from '@angular/core';
import {
NbAuthComponent,
NbLoginComponent,
NbLogoutComponent,
NbRegisterComponent,
NbRequestPasswordComponent,
NbResetPasswordComponent,
} from '@nebular/auth';
import { AuthGuard } from './auth-guard.service';
import { HomeComponent } from './Home/home.component';
import { OffreAComponent } from './offrea/offrea.component';
const routes: Routes = [
{path: 'home', component: HomeComponent},
{path: 'offreappel', component: OffreAComponent},
{ path: 'users', loadChildren: 'app/pages/pages.module#PagesModule', canActivate: [AuthGuard]},
{
path: 'auth',
component: NbAuthComponent,
children: [
  {
    path: '',
    component: NbLoginComponent,
  },
  {
    path: 'login',
    component: NbLoginComponent,
  },
  {
    path: 'register',
    component: NbRegisterComponent,
  },
  {
    path: 'logout',
    component: NbLogoutComponent,
  },
  {
    path: 'request-password',
    component: NbRequestPasswordComponent,
  },
  {
    path: 'reset-password',
    component: NbResetPasswordComponent,
  },
],
 },
{ path: '**', pathMatch: 'full', redirectTo: 'users'},
];
const config: ExtraOptions = {
useHash: true,
};

 @NgModule({
 imports: [RouterModule.forRoot(routes, config)],
 exports: [RouterModule],
 })
 export class AppRoutingModule {
 }

А вот мой сервис AuthGuard:

import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { NbAuthService } from '@nebular/auth';
import { tap } from 'rxjs/operators';

@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: NbAuthService, private router: Router) {}

canActivate() {
return this.authService.isAuthenticated().pipe(
    tap(authenticated => {
        if (!authenticated) {
            this.router.navigate(['auth/login']);
        }
    }),
);
}}

1 Ответ

0 голосов
/ 14 мая 2019

У вас есть перенаправление на users при ошибке маршрутизации.

   { path: '**', pathMatch: 'full', redirectTo: 'users'},

Так что каждый раз, когда вы идете по неверному пути , это будет перенаправление на:

{ path: 'users', loadChildren: 'app/pages/pages.module#PagesModule', canActivate: [AuthGuard]}

Я бы рассмотрел добавление страницы с маршрутом по умолчанию, и когда маршрут не соответствует перенаправлению на эту страницу:

{ path: '', component: HomeComponent},
{ path: '**', pathMatch: 'full', redirectTo: ''},

Другая вещьчтобы заметить, проверьте, действительно ли вам нужен useHash.Это необходимо только для некоторых сред.

...