मोबाइल ब्राउजरों में काम नहीं कर रहा लॉगआउट मैडियलॉग

वोट
2

मैं उपयोगकर्ता को सचेत करना चाहता हूं यदि वह 20 मिनट के लिए निष्क्रिय है। तो, एक सेवा बनाई।

यह डेस्कटॉप के साथ ठीक काम कर रहा है, लेकिन मोबाइल फोन में यह दिखाई नहीं दे रहा है और कभी-कभी यदि स्क्रीन को कुछ घंटों के लिए पृष्ठभूमि में छोड़ दिया जाता है, तो लॉगआउट संवाद स्क्रीन ने पृष्ठ पर एक बार फिर से उलटी गिनती शुरू कर दी।

मेरा मतलब है कि इसे लॉगआउट करना चाहिए और मुझे लॉगिन पेज देखना चाहिए लेकिन यहां यह लॉगआउट अलर्ट काउंटडाउन पेज दिखाता है, कुछ घंटों के बाद यह मोबाइल ब्राउज़र में दिखाई नहीं देता है।

यहाँ मेरा कोड है कृपया मुझे बताएं कि मुझे कौन सा तर्क याद आ रहा है।

यहाँ Service.ts फ़ाइल है। check () हर 5 सेकंड के लिए बुलाया जाएगा और लॉगआउट अलर्ट 20 सेकंड में दिखाई देगा ...

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
    );
  }
}
15/05/2020 को 13:34
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
0

मैं मोबाइल पर विश्वास करता हूं, जब उपयोगकर्ता ने ब्राउज़र को कम कर दिया तो आपका तर्क निष्पादित करना बंद कर देता है क्योंकि मोबाइल फोन पृष्ठभूमि प्रबंधन को स्वचालित रूप से रैम प्रबंधन के लिए मार देता है और जब वह ब्राउज़र को पुन: लॉन्च करता है तो आपकी स्क्रिप्ट फिर से शुरू होती है। आपको नष्ट या विंडो पर लॉगआउट भी करना चाहिए।

23/05/2020 को 09:56
का स्रोत उपयोगकर्ता

वोट
0

सुझावों के लिए धन्यवाद, लेकिन नीचे दिए गए समाधान ने मेरे लिए काम किया

इस्तेमाल किया ngZone जहां यह पृष्ठभूमि में चलता है

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();
      }
    });
  }
26/05/2020 को 15:58
का स्रोत उपयोगकर्ता

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