У меня есть несколько модулей, которые все используют одну службу под названием categoriesService
, которая хранит данные для «категорий» пользователя. Я хочу иметь возможность сохранять субъект поведения категорий в нескольких аутентифицированных модулях, чтобы мне не приходилось продолжать делать сетевые запросы. Для этого у меня есть функция, работающая для моих компонентов верхнего уровня (аутентифицированных):
ngOnInit() {
this.pageData = this.clientConfigService.getPageData();
this.categoriesService.categoriesData.pipe(takeWhileAlive(this)).subscribe((data) => {
if (data.length) {
this.pageLoaded = true;
} else {
this.categoriesService.getAllCategories(
this.pageData['portalCategories1'],
this.pageData['voluntaryCategories'],
this.pageData['portalCategories2']);
}
});
}
CategoriesService.ts
providedIn: 'root'
})
@AutoUnsubscribe()
export class CategoriesService {
response: any = [];
private categoriesResponse = new BehaviorSubject(this.response);
categoriesData = this.categoriesResponse.asObservable();
constructor(
private apiService: ApiService,
private router: Router
) { }
getAllCategories(categoriesString: string = '', voluntaryCat: string = '', addedCategories: string = '') {
const categoriesListArr = this.splitUpCategoriesString(categoriesString);
const voluntaryCategories = this.splitUpCategoriesString(voluntaryCat);
const body = {
categories: categoriesListArr.concat(voluntaryCategories),
summaryOnly: true
};
this.apiService.post('yd-core/npb/renderCategory', body).pipe(takeWhileAlive(this)).subscribe(
(data) => {
// Set categories
this.categoriesResponse.next(data);
});
....
clearCategories() {
this.categoriesResponse.next([]);
}
}
Я хочу иметь возможность чтобы очистить категории пользователей при выходе из системы, однако у меня возникают две проблемы:
категории не очищаются при выходе из системы, и, таким образом, новый пользователь видит категории прошлого пользователя, если они входят в систему, если они не обновляют sh браузер
categoryService.getAllCategories () вызывается после того, как пользователь по какой-то причине вышел из системы и приводит к 401 (неавторизованному) сетевому запросу
AuthService.ts
logout() {
const clientId = this.clientId;
const config = { headers: new HttpHeaders().set('Content-Type', 'application/json') };
this.http.post<any>(`${environment.apiUrl}/yd-core/npb/logout`, config).pipe(takeWhileAlive(this)).subscribe(
() => {
this.router.navigate([`/login/${clientId}`]);
this.accountDetailsService.clearAccountDetails();
this.personalInformationService.clearPersonalInformation();
this.payrollDeductionService.clearPayrollData();
this.categoriesService.clearCategories();
localStorage.clear();
sessionStorage.clear();
let popUpConfig;
popUpConfig = {
message: 'You have succesfully logged out',
code: null,
error: false,
noTimeout: true
};
this.popUpService.initiatePopUp(popUpConfig);
}
);
}