Я пишу Angular Guards из моего заявления. После того, как пользователь входит в мой AuthService, я меняю значение переменной BehaviourSubject в моем userService, используя next (). В моем GuardService я хочу получить последнее значение из переменной, но я всегда получаю начальное значение.
UserService
export class UserService {
private isAdmin = new BehaviorSubject<boolean>(true);
isCurrentUserAdmin = this.isAdmin.asObservable();
changeAdminRole(isAdmin: boolean) {
// change the BehaviourSubject value
this.isAdmin.next(isAdmin);
}
}
AdminGuard
export class AdminGuard implements CanActivate {
constructor(private userService: UserService) { }
canActivate() {
this.userService.isCurrentUserAdmin
.subscribe((response: boolean) => {
console.log('working here', response);
if(response) return true;
});
return false;
}
}
appModule
app.module.ts
imports: [
BrowserModule,
AppRoutingModule,
BsDropdownModule.forRoot(),
RouterModule.forRoot([
{path: '', component: HomeComponent},
{path: 'products', component: ProductsListComponent, canActivate: [AuthGuard, AdminGuard]},
{path: 'shopping-cart', component: ShoppingCartComponent},
{path: 'my-orders', component: MyOrdersComponent, canActivate: [AuthGuard, AdminGuard]},
{path: 'check-out', component: CheckOutComponent, canActivate: [AuthGuard, AdminGuard]},
{path: 'order-success', component: OrderSuccessComponent, canActivate: [AuthGuard, AdminGuard]},
{path: 'login', component: LoginComponent},
{path: 'admin/products', component: AdminProductsListComponent, canActivate: [AuthGuard, AdminGuard]},
{path: 'admin/orders', component: AdminOrdersListComponent, canActivate: [AuthGuard, AdminGuard]},
{path: '**', component: HomeComponent}
])
],
providers: [AuthService, UserService, AuthGuard, AdminGuard]
Я ожидаю отклика в наблюдаемой моей AdminGuard, когда я перехожу к маршруту, который я хочу защитить, чтобы было установлено последнее значение в UserService.changeAdminRole () при вызове из моего AuthService, но я всегда получаю ноль.