перенаправление на страницу входа в систему, если пользователь не вошел в угловой 12

#angular

Вопрос:

Я использую Angular 12 Мне нужно перенаправить на страницу входа в систему, если пользователь пытался получить доступ к странице, для доступа к ней необходимо пройти аутентификацию. Я пытался использовать это, но мне не удалось, я использовал gurd

admin.gurd.ts

   export class AdminGuard implements CanActivate {
  constructor(private accountService: AccountService, private toastr:ToastrService,private router:Router) { }

  canActivate(): Observable<boolean>{
    return this.accountService.currentUser$.pipe(
      map((user:User)=>{
        if (!user.role.includes('Administrator') || !user.role.includes('Customer') || !user.role.includes('Seller'))return true;
        this.router.navigate(['/']);
        this.toastr.error("You Not Allowed To Enter Here")
        return false;
      })
    )
  }

}
 

приложение-маршрутизация.moudle.ts

 const routes: Routes = [
  {
    path: 'controlPanel', component: MainComponent,canActivate:[AdminGuard],
    children:[
      {path: '', component: HomeComponent}
    ]
  },
  {path: 'login', component: LoginComponent},
  {path: '', component: LoginComponent},
  {path: '**', redirectTo: '', pathMatch: 'full'},
];

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

Ответ №1:

Вы можете обновить файл «admin.gurd.ts» с помощью приведенного ниже кода

 export class AdminGuard implements CanActivate {
  constructor(private accountService: AccountService, private toastr:ToastrService,private router:Router) { }

  canActivate(): Observable<boolean>{
    return this.accountService.currentUser$.pipe(
      map((user:User)=>{
        if (!user.role.includes('Administrator') || !user.role.includes('Customer') || !user.role.includes('Seller'))return true;         
        this.toastr.error("You Not Allowed To Enter Here")
        // Updated Line
        this.router.navigateByUrl('/login'));
        return false;
      })
    )
  }

}
 

Комментарии:

1. все еще не работает

Ответ №2:

Наблюдаемое, возвращенное от охранников canActivate , должно завершиться для углового, чтобы вызвать охрану. Вы можете завершить его с помощью take(1)

 canActivate(): Observable<boolean>{
    return this.accountService.currentUser$.pipe(
      map((user:User)=>{
        // add the logic
      }),
      take(1)
    )
  }
 

Комментарии:

1.все еще не работает

2. в консоли ничего нет