Angular AuthGuard не работает - PullRequest
0 голосов
/ 19 мая 2018

Я использую угловой интерфейс CanActivate Authguard для защиты моего компонента.

@Injectable()
export class AuthGuard implements CanActivate{

constructor(private router: Router, private authService: AuthenticationService) {}

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {

    this.authService.isLoggedIn.take(1).map((isLoggedIn : boolean) => {

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

        return true;
    })

    this.router.navigate(['/login']);
    return false;
   }
}

Я добавил его в конфигурацию своего маршрутизатора следующим образом.

const appRoutes: Routes = [
{path : '',redirectTo : 'login',pathMatch : 'full'},
{ path: 'home', component: HomeComponent,canActivate : [AuthGuard] }
]

Я также добавил его в массив поставщиков,

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
providers: [AuthGuard,  
ExpenseService,SellDetailService,AuthenticationService],
styleUrls: ['./app.component.css']
})

Но когда я запускаю приложение, оно выдает следующую ошибку

StaticInjectorError (AppModule) [AuthGuard]:
StaticInjectorError (Платформа: ядро) [AuthGuard]: NullInjectorError: Нет поставщика для AuthGuard!

Я думаю, что реализовал это правильно, но он не работает.что я делаю не так ???

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Добавьте в свой файл app.module.ts следующее:

Поставщики: [AuthGuard]

0 голосов
/ 27 сентября 2018

Вы должны добавить имя своих охранников в app.module в массиве провайдеров. Что-то вроде этого

Провайдеры: [AuthGuard]

...