В настоящее время я пытаюсь заставить приложение Angular выполнять вызов службы API, когда пользователь пытается отойти от моей страницы.Либо закрыв вкладку / окно, либо набрав внешний URL-адрес.
Я пытался реализовать несколько различных способов, описанных здесь, в вопросах stackoverflow, но, похоже, ни один из них не дал желаемого эффекта.Некоторые упоминают о синхронизации запросов AJAX, которые были или находятся в процессе устаревания в onbeforeunload в Chrome.Другие советуют использовать XMLHttpRequests, которые, похоже, постигла та же участь.Я пытался использовать @HostListener('window:onbeforeunload', ['$event'])
и эквивалент в HTML (window:beforeunload)="doBeforeUnload($event)"
, но все отказываются сотрудничать.Я могу получить console.logs для отображения, но API никогда не получает никакого вызова для выхода из системы пользователя.Я также использовал navigator.sendBeacon
и, несмотря на то, что его функция возвращает true, сигнализируя о том, что задание было отправлено в очередь браузера, ничего не материализуется.
В настоящее время функция выхода из системы выглядит так:
userLogout(): Observable<any> {
return this.apiService.get('/Account/Logout/');
}
Это, в свою очередь, общая функция http get:
get<T>(url: string, options?: { params: HttpParams }): Observable<any> {
return this.httpRequest<T>('get', url, null, options ? options.params : null);
}
Полный URL-адрес добавляется с использованием HttpInterceptor.Сама функция выхода из системы работает, так как она используется в пункте меню, который работает, как ожидается, при использовании вручную.Таким образом, эта функция не должна быть проблемой.
Все, что я пытаюсь сделать, это вызвать функцию userLogout либо синхронно, либо асинхронно и сообщить бэкэнду, что пользователь ушел.