Avlogging MatDialog fungerer ikke i mobilnettlesere

stemmer
10

Jeg vil varsle bruker hvis han er inaktiv i 20 minutter. Så, opprettet en tjeneste.

Det fungerer bra med skrivebordet, men i mobiltelefonen vises det ikke, og noen ganger hvis skjermen ble liggende i bakgrunnen i et par timer, startet dialogboksen for utlogging nedtellingen når jeg kom på siden igjen.

Jeg mener det skal logge av og jeg skal se påloggingssiden, men her viser den nedtellingsside for utloggingsvarsel etter noen timer ellers vises den ikke i mobilnettleseren.

Her er koden. Vennligst gi meg beskjed om hvilken logikk jeg mangler.

Her er Service.ts-filen. sjekk () vil bli kalt for hvert sekund, og utloggingsvarsel vil vises om 20 sekunder ...

const MINUTES_UNITL_AUTO_LOGOUT = 0.2; // 1 mins- 20
const CHECK_INTERVAL = 5000; // checks every 5 secs- 5000

@Injectable({
  providedIn: root,
})
export class AutoLogoutService {
  logOutInterval: any;

  constructor(
    private localStorage: LocalStoreManager,
    private authService: AuthService,
    public dialog: MatDialog
  ) {
    this.localStorage.savePermanentData(
      Date.now().toString().toString(),
      DBkeys.AUTO_LOGOUT
    );
    this.initListener();
  }

  initListener() {
    document.body.addEventListener(click, () => this.reset());
    document.body.addEventListener(mouseover, () => this.reset());
    document.body.addEventListener(mouseout, () => this.reset());
    document.body.addEventListener(keydown, () => this.reset());
    document.body.addEventListener(keyup, () => this.reset());
    document.body.addEventListener(keypress, () => this.reset());
  }

  reset() {
    this.setLastAction(Date.now());
  }

  initInterval() {
    this.logOutInterval = setInterval(() => {
      this.check();
    }, CHECK_INTERVAL);
  }
  clearInterval() {
    clearInterval(this.logOutInterval);
  }

  check() {
    const now = Date.now();
    const timeleft = this.getLastAction() + MINUTES_UNITL_AUTO_LOGOUT * 60 * 1000;
    const diff = timeleft - now;
    const isTimeout = diff < 0;
    console.log(diff);
    if (isTimeout && !this.authService.isLogoutDialogOpenned) {
      this.authService.isLogoutDialogOpenned = true;
      this.dialog
        .open(LogoutDialog, {
          maxWidth: 100vw,
        })
        .afterClosed()
        .subscribe((result) => {
          this.authService.isLogoutDialogOpenned = false;
        });
    }
  }

  public getLastAction() {
    return parseInt(this.localStorage.getData(DBkeys.AUTO_LOGOUT));
  }

  public setLastAction(lastAction: number) {
    this.localStorage.savePermanentData(
      lastAction.toString(),
      DBkeys.AUTO_LOGOUT
    );
  }
}
Publisert på 15/05/2020 klokken 13:34
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Jeg tror på mobil, når brukeren minimerer nettleseren din, slutter logikken din å utføres da mobiltelefoner dreper bakgrunnsapplikasjon automatisk for styring av rammer, og når han starter nettleseren på nytt, starter skriptet igjen. Du bør også logge ut på ødelegge eller på windows.beforeunload hendelse.

Svarte 23/05/2020 kl. 09:56
kilden bruker

stemmer
0

Takk for forslagene, men løsningen nedenfor fungerte for meg

Brukte ngZone der den kjører i bakgrunnen

initInterval() {
    this.ngZone.runOutsideAngular(() => {
      this.logOutInterval = setInterval(() => {
        this.check();
      }, CHECK_INTERVAL);
    })
  }
  clearInterval() {
    clearInterval(this.logOutInterval);
  }

  check() {
    const now = Date.now();
    const timeleft =
      this.getLastAction() + MINUTES_UNITL_AUTO_LOGOUT * 60 * 1000;
    const diff = timeleft - now;
    const isTimeout = diff < 0;
    const isBackgroundLogoutEnabled = diff < -ONE_MINUTE;

    this.ngZone.run(() => {
      if (isTimeout && !this.authService.isLogoutDialogOpenned) {
        this.authService.isLogoutDialogOpenned = true;
        this.dialog
          .open(LogoutDialog, {
            maxWidth: "100vw",
          })
          .afterClosed()
          .subscribe((result) => {
            this.authService.isLogoutDialogOpenned = false;
          });
      }
      if(isBackgroundLogoutEnabled){
        this.clearInterval();
        this.authService.isLogoutDialogOpenned = false;
        this.authService.logout();
        this.authService.redirectLogoutUser();
        this.dialog.closeAll();
      }
    });
  }
Svarte 26/05/2020 kl. 15:58
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more