Не могу очистить тему моего поведения при выходе из системы - PullRequest
0 голосов
/ 06 августа 2020

У меня есть несколько модулей, которые все используют одну службу под названием 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);
      }
    );
  }
...