Angular: проблема перенаправления маршрутизации - PullRequest
0 голосов
/ 20 февраля 2020

Я использую маршрутизатор в angular для перенаправления пользователя в зависимости от того, вошел ли он в систему и его текущий URL: Ниже вы видите маршруты из моего модуля app-routing-module:

const routes: Routes = [
  { path: 'home', component: HomeComponent, canActivate: [RouteGuardService] },
  { path: 'login', component: LoginComponent},
  { path: '', redirectTo: 'login', pathMatch: 'full'}, // redirects to '' exists hence keep this in mind when redirecting
  { path: '**', redirectTo: 'home' }, 
];

В случае, если пользователь не вошел в систему, но пытается получить доступ к каталогу "/ home", он / она перенаправляется в "/ login". Код, который я использую для этого:

if (accessGranted){
   return true;
} else {
   // tell router to navigate to login pag
   this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });
   return false;
}

Этот код в основном работает, но сохраняется одна ошибка: если я пытаюсь получить доступ к дому без входа в систему, я сначала перенаправляюсь на «/», только если я перефразирую sh, меня перенаправляют на страницу входа. Я не очень понимаю, почему это происходит, и хотел бы решить эту проблему.

С уважением, Сэм

1 Ответ

0 голосов
/ 20 февраля 2020
@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private authService: AuthService, private router: Router) {}

  canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    if (!this.authService.isLoggedIn) {
      return this.router.parseUrl(`/login?returnUrl=${state.url}`);
    } else {
      return true;
    }
  }
}
...