Пользователь перенаправления маршрута Angular7 - PullRequest
0 голосов
/ 06 марта 2019

Если пользователь входит в систему, он автоматически перенаправляется на route: '', и токен сохраняется в localStorage.

Однако, если вошедший в систему пользователь вручную вводит URL-адрес route: /login, он долженмаршрутизируется в route: '', и это то, чего я хочу достичь.

Что я сделал, так это добавил проверку в моем OnInit() внутри моего LoginComponent, и это работает.Но как я могу добиться этого в моей AuthGuard?Я подумываю получить запрошенный маршрут, если route: /login, и перейти к route: '', если уже вошел в систему.

Маршрут:

{ path: '', component: PostListComponent },
{ path: 'create', component: PostCreateComponent, canActivate: [AuthGuard] },
{ path: 'edit/:postId', component: PostCreateComponent, canActivate: [AuthGuard] },
{ path: 'login', component: LoginComponent }

AuthGuard:

const currentRoute = route.url[0].path;
const isAuth = this.authService.getIsAuth();

if (!isAuth) {
  this.router.navigate(['/login']);
}

if (currentRoute === '/login') {
  this.router.navigate(['/']);
}

console.log(currentRoute);
return isAuth;

LoginComponent:

ngOnInit() {
 const isAuth = this.authService.getIsAuth();
 if (isAuth) {
   this.router.navigate(['/']);
 }
}

ОБНОВЛЕНИЕ: я обновил свой AuthGuard для проверки текущего маршрута, но он не получает маршрут, если он введен вручную в адресную строку.

1 Ответ

0 голосов
/ 06 марта 2019

После дальнейшего просмотра моего кода и просмотра стекового потока я пришел к решению, но я не уверен в возможной безопасности.Если у вас есть лучший подход, пожалуйста, поделитесь.

Маршрут:

{ path: 'login', component: LoginComponent, canActivate: [AuthGuard] }

AuthGuard:

const currentRoute = route.url[0].path;
let isAuth = this.authService.getIsAuth();

if (isAuth) {
  if (currentRoute === 'login') {
    this.router.navigate(['/']);
  }
} else {
  if (currentRoute === 'login') {
    isAuth = true;
  } else {
    this.router.navigate(['/login']);
  }
}
return isAuth;

isAuth возвращает логическое значение, если аутентифицировано или нет, и здесьв AuthGuard я использовал let и изменил значение на true.

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