У меня есть приложение, защищенное страницей входа, и я пытаюсь реализовать простой таймер сеанса, скажем, если пользователь не обновил sh или не сделал что-либо в приложении (то есть, не go через OnInit ( )) приложение должно выгнать пользователя
В настоящее время у меня есть app component
следующая функция
subscribeTimer: any;
minutes = 0;
seconds = 0;
timeLeft = 12;
ObservableTimer() {
const source = timer(1000, 1000);
const abc = source.subscribe(val => {
if (this.subscribeTimer === 1) {
abc.unsubscribe();
this.alertfy.alert('Session Timed Out', 'Your session has been expired!', () => { this.logOut(); }, false);
}
this.subscribeTimer = this.timeLeft - val;
this.minutes = Math.floor(this.subscribeTimer / 60);
this.seconds = Math.floor(this.subscribeTimer - this.minutes * 60);
});
}
Я импортирую timer
из rxjs
Затем я добавляю минуты / секунды в свой компонент. html вот так
<div *ngIf="isLoggedIn" style="text-align: right;"><p>Time Left: {{minutes}}:{{seconds}}</p></div>
В настоящее время я вызываю функцию ObservableTimer()
в моем OnInit()
этого app component
из-за того, что я не подписался на это можно наблюдать, пока я не обновлю sh страницу, когда я уже вошел в систему, как показано ниже:
ngOnInit(): void {
const token = localStorage.getItem('token');
if (token) {
this.oberserableTimer();
}
}
Я хочу иметь возможность запустить это наблюдаемое из другого сервиса, называемого auth.service.ts
, который обрабатывает этот сервис логин и my app component
могут получить доступ к любой функции в нем, потому что она внедрена в конструктор app component
. Другими словами, когда пользователь входит в систему, запустите наблюдаемое в моей службе аутентификации и позвольте компоненту приложения подписаться на это наблюдаемое и прочитать его значение и соответственно обновить html.
Плюс, я хочу иметь возможность сбросить это время с любого компонента, скажем, пользователь щелкнул по чему-то или перешел на другую страницу. Я хочу иметь возможность сбросить таймер.