Угловая защита с несколькими условиями и перенаправлениями - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу создать комплексную защиту маршрутизатора, которая проверяет, прошел ли пользователь аутентификацию в веб-приложении, но, если это так, она проверяет и другое условие и для каждого истинного условия перенаправляет на страницу (которая, однако, находится под тем же маршрутизатором).охранник).Чтобы лучше объяснить это внутри защиты маршрутизатора, я должен сделать что-то вроде этого:

canActivate(state: RouterStateSnapshot) {
   if(isAuthenticated()) {
     if(!isEmailVerified) {
        // redirect to the "check the email" page
     }
     else if(!isProfileComplete()) {
        // redirect to profile completion page
     }
     else {
        // redirect to user homepage
     }
    return true;
   } else {
   // redirect login
   return false;
   }
}

Проблема на самом деле в том, что это не работает, потому что каждый редирект приводит к странице, защищенной этим сторожем, а затем каждый из перенаправлений вызываетдругой редирект, и он заканчивается бесконечным циклом.Я уже пытался проверить внутри условий, если State.url не то же самое, что мы перенаправляем внутрь тела условия, но это не работает.Есть ли простое решение для этого?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Я предлагаю использовать строку перенаправления для каждого условия и перенаправлять защиту в конце функции, как;

canActivate(state: RouterStateSnapshot) {
   let redirectionPath: string = "";
   if(isAuthenticated()) 
   {
        if(!isEmailVerified) {
           redirectionPath = "emailverified";
        }
        else if(!isProfileComplete()) {
        // redirect to profile completion page
           redirectionPath = "completionPage";
        }
        else {
          // redirect to user homepage
           redirectionPath = "homepage";
        }
   } else {
           redirectionPath = "login";
   }

   this.router.navigate(['/your-path']);
   return true;
} 
0 голосов
/ 01 февраля 2019

if(!isEmailVerified) {
        // redirect to the "check the email" page
     }
     else if(!isProfileComplete()) {
        // redirect to profile completion page
     }
     else {
        // redirect to user homepage
     }

Удалите этот код из защиты и добавьте его в другую защиту (перенаправление), откуда вы можете перенаправить страницу, используя условия

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