Ein Modul zur Reaktion auf Leerlaufbenutzer in Winkelanwendungen. Dies ist ein Umschreiben des NG-Idle-Moduls; Wenn Sie jedoch Angular 1 verwenden, müssen Sie dieses Modul verwenden.
Die Winkelgemeinschaft braucht dich! Ich suche einen neuen Entwickler oder Team, um die Wartung dieses Moduls zu übernehmen. Dies sind die Verantwortlichkeiten, die interessierte Kandidaten berücksichtigen sollten:
Idealerweise ein Kandidat:
Bitte setzen Sie sich mit Kontakt auf, wenn Sie interessiert sind!
Besuchen Sie https://grbsk.github.io/ng2-idle, um ein einfaches Beispiel mit Schnellstartanweisungen anzuzeigen.
@ng-idle wird über npm versendet. Sie können das Paket mit dem folgenden Befehl für die neueste unterstützte Version von Angular installieren:
npm install --save @ng-idle/core
Die Integration und Konfiguration des Pakets in Ihre Anwendung erfordert einige weitere Schritte. Bitte besuchen Sie @ng-idle-Beispiel für Quelle und Anweisungen, wie Sie loslegen können.
Die primäre Anwendung dieses Moduls besteht darin, zu erkennen, wann Benutzer im Leerlauf sind. Es kann auch verwendet werden, um Benutzer vor einer bevorstehenden Auszeit zu warnen und dann auszuzeiten. Der Kern dieses Moduls ist der Idle , der sein Bestes tut - basierend auf Ihrer Konfiguration - zu erkennen, wann ein Benutzer aktiv oder untätig ist, und diese Informationen an Ihre Anwendung weitergeben, damit er angemessen reagieren kann.
Die Kernfunktionalität finden Sie im @ng-idle/core Paket über NPM.
Zusätzliche Module zur Erweiterung der Funktionalität:
@ng-idle/keepalive (siehe unten) In einem gemeinsamen Anwendungsfall, in dem es für die Sitzungsverwaltung verwendet wird, müssen Sie möglicherweise regelmäßig dem Server signalisieren, dass der Benutzer noch angemeldet und aktiv ist. Wenn Sie diese Funktionalität benötigen, kann @ng-idle optional in @ng-idle/keepalive integriert werden. @ng-idle unterrichtet @ng-idle/keepalive to Ping, während der Benutzer aktiv ist, und stoppt, sobald er untätig ist oder aus dem Zeitpunkt steht. Wenn der Benutzer die Aktivität wieder aufnimmt oder der Leerlaufstatus zurückgesetzt wird, wird er sofort pingen und dann das Ping fortsetzen. Bitte beachten Sie , dass die Keepalive-Integration optional ist und Sie @ng-idle/keepalive separat installieren und konfigurieren müssen, um diese Funktionalität zu erhalten. Sie können Ihre eigenen implementieren, indem Sie KeepaliveSvc erweitern und als Anbieter in Ihrer Anwendung für die KeepaliveSvc -Klasse konfigurieren.
Ein Interrupt ist jede Eingangsquelle (normalerweise vom Benutzer, aber möglicherweise Dinge wie andere Registerkarten oder ein Ereignis), die zum Signal auf Idle verwendet werden können, dass die Idle -Uhr unterbrochen oder zurückgesetzt werden sollte. Im Gegensatz zu ng-idle sind diese Quellen nicht festcodiert; Sie können InterruptSource oder eine der eingebauten Quellen für Ihre Zwecke verlängern. Diese Funktion ist auch nützlich, um Eingangsgeräusche zu verarbeiten, die Ihren bestimmten Anwendungsfall plagen können. Es kann auch verwendet werden, um bestimmte Elemente auf einer Seite und nicht auf das gesamte Dokument oder Fenster abzuzeigen. Die folgenden Quellen werden in dieses Paket eingebaut:
InterruptSource (Zusammenfassung): Ein Basistyp, den Sie implementieren können, um Ihre eigene Quelle zu erstellen.EventTargetInterruptSource : Jedes Objekt, das EventTarget implementiert, wie z. B. ein HTMLElement oder ein Window . Nehmen Sie das Objekt ein, das die Quelle und eine abgrenzte Zeichenfolge, die die Ereignisse enthält, die einen Interrupt verursachen.DocumentInterruptSource : Sucht nach Ereignissen (in einer abgrenzten Zeichenfolge), die auf das document.documentElement sprudeln.DocumentElement ( html -Knoten).WindowInterruptSource : sucht nach Ereignissen (in einer abgrenzten Zeichenfolge), die bis zum Window sprudeln.StorageInterruptSource : Sucht nur nach dem Storage von Window . Obligatorisch für LocalStorageExpiry . Hinweis : Sie müssen Quelle (en) selbst konfigurieren, wenn Sie die Anwendung initialisieren. Standardmäßig sind keine Interrupts konfiguriert. Sie können eine Konfiguration analog zum ng-idle Standard-Standard verwenden, indem Sie DEFAULT_INTERRUPTSOURCES importieren und diese Referenz auf Idle.setInterrupts(DEFAULT_INTERRUPTSOURCES); .
Eine andere von ng-idle portierte Funktion ist die Möglichkeit, einen Ablaufwert in einem Speicher zu speichern, in dem mehrere Registerkarten oder Windows, an die die gleiche Anwendung ausgeführt wird, schreiben können. In diesem Geschäft ist dieses Geschäft häufig die localStorage , könnte aber Cookies oder was auch immer Sie wollen. Der Zweck dieser Ablauf- und Ablaufspeicher ist zweifach: Erstens, um zu verhindern, dass ein Fenster nicht ausgeht, wenn es länger schläft oder eine Pause einbringt als der konfigurierte Zeitüberschreitungszeitraum. Zweitens kann es verwendet werden, damit die Aktivität in einer Registerkarte oder in einem Fenster andere Registerkarten oder Fenster in derselben Anwendung zum Zeitpunkt des Zeitpunkts verhindert.
Standardmäßig wird ein LocalStorageExpiry -Typ bereitgestellt, der nur die Ablauf in der örtlichen Storage im Auge behält. Es wird alle oben genannten Zwecke erfüllen. Wenn Sie nicht mehrere Registerkarten oder Windows unterstützen möchten, können Sie SimpleExpiry verwenden. Mit anderen Worten, SimpleExpiry koordiniert die letzte Aktivität zwischen Registerkarten oder Fenstern nicht. Wenn Sie den Ablaufwert in einem anderen Geschäft wie Cookies speichern möchten, müssen Sie eine Implementierung verwenden oder erstellen, die dies unterstützt. Sie können Ihren eigenen erstellen, indem Sie IdleExpiry oder SimpleExpiry erweitern und als Anbieter für die IdleExpiry -Klasse konfigurieren.
Der Abhängigkeitsinjektor in Winkel unterstützt eine hierarchische Injektionsstrategie. Auf diese Weise können Sie eine Instanz des Idle in dem von Ihnen benötigten Bereich erstellen, und es kann mehr als eine Instanz geben. Auf diese Weise können Sie zwei separate Uhren auf der Seite auf zwei verschiedenen Elementen auf der Seite haben.
Wenn Sie die Standardablauf ( LocalStorageExpiry ) verwenden, müssen Sie einen Namen für jeden Leerlauf mit Idle mit Idle.setIdleName('yourIdleName') definieren. Andernfalls wird der gleiche Schlüssel im LocalStorage verwendet und diese Funktion funktioniert nicht wie erwartet.
Betrachten Sie beispielsweise eine E -Mail -Bewerbung. Für eine verstärkte Sicherheit möchte die Anwendung möglicherweise feststellen, wann der Benutzer inaktiv ist, und sich anmelden, sodass er die Möglichkeit gibt, seine Sitzung zu erweitern, wenn er noch am Computer ist und gerade abgelenkt wurde. Darüber hinaus kann der Server für eine noch bessere Sicherheit die Sitzung des Benutzers ein Sicherheitstoken ausgeben, das nach 5 Minuten Inaktivität abläuft. Der Benutzer kann viel mehr Zeit in Anspruch nehmen, um seine E -Mails einzugeben und zu senden. Es wäre frustrierend zu finden, dass Sie angemeldet sind, wenn Sie die Software aktiv benutzt haben!
@ng-idle/core kann erkennen, dass der Benutzer klickt, tippt, berührt, scrollen usw. und weiß, dass der Benutzer noch aktiv ist. Es kann mit @ng-idle/keepalive funktionieren, um den Server alle paar Minuten zu pingen, um sie angemeldet zu halten. In diesem Fall, solange der Benutzer etwas tut, bleiben sie angemeldet. Wenn sie sich vom Computer entfernen, können wir einen Warndialog präsentieren und dann nach einem Countdown auszeichnen.
@ng-idle/core verwendet DOM-Ereignisse für verschiedene Ziele, um die Benutzeraktivität zu erkennen. Wenn Sie jedoch SSR/Universal-Rendering der App verwenden, läuft die App jedoch nicht immer im Browser und hat daher möglicherweise keinen Zugriff auf diese DOM-Ziele, wodurch Ihre App möglicherweise zum Absturz gebracht oder Fehler geworfen wird, da sie versucht, Browser-Globale wie document und window über @ng-idle zu verwenden.
EventTargetInterruptSource und alle Interrupt-Quellen, die daraus abgeben (z. B. DocumentInterruptSource , WindowInterruptSource und StorageInterruptSource ), sind so konzipiert, dass sie die Ereignisziel-Hörer für die Kompatibilität mit serverseitigem Rendering faul initialisieren. In der EventTargetInterruptSource wird festgestellt, ob Ihre App im Browser oder auf dem Server ausgeführt wird, indem isPlatformServer verwendet wird, und überspringen die Initialisierung der Ereignisziel -Hörer, wenn Sie auf dem Server ausgeführt werden.
Dieses Projekt wurde unter Verwendung der NodeJS -Version entwickelt, die in der .nvmrc -Datei gefunden wurde. Möglicherweise haben Sie Probleme mit älteren Versionen. Versuchen Sie NVM oder ähnlich, um verschiedene Versionen des Knotens gleichzeitig zu verwalten. Wenn Sie NVM verwenden, können Sie nvm install zum Herunterladen ausführen und zur richtigen Version wechseln.
Sobald Sie das Repository geklont haben, installieren Sie alle Pakete mit npm :
npm install
Sie können jetzt alle Tests einmal mit Abdeckung erstellen und ausführen.
npm test
Sie können auch kontinuierlich Tests ausführen, während Sie Änderungen an einem Projekt vornehmen, indem npm run ng test <project name> oder ng test <project name> wenn Sie @angular/cli global installiert haben.
npm run ng test core
...
npm run ng test keepalive
Hinweis: Keepalive hängt vom Kern ab. Wenn Sie die oben genannten kontinuierlichen Tests durchführen, müssen Sie npm build oder npm run ng build core zuerst und nach dem Kern von Änderungen vornehmen. npm test baut jedoch alle Module auf und führt die Tests in einem Schuss durch.
Siehe den beitragenden Leitfaden.