Problembeschreibung Das Produkt gibt an, dass der Benutzer aus Sicherheitsgründen, wenn er längere Zeit keine Aktion ausführt, zur Anmeldeseite zurückgeleitet und aufgefordert wird, sich erneut anzumelden, genau wie bei einer Bank-App. In diesem Artikel werden zwei Möglichkeiten zum Erreichen dieses Effekts beschrieben, nämlich die Front-End-Steuerung und die Back-End-Steuerung, jeweils mit eigenen Details und anwendbaren Nutzungsszenarien. Frontend-Steuerung (Methode 1) Ideen Zunächst einmal: Was sind die spezifischen Erscheinungsformen von Benutzern, die über einen langen Zeitraum nicht aktiv sind? Tatsächlich kommt es darauf an, ob das Ereignis längere Zeit nicht ausgelöst wurde. Wenn der Benutzer beispielsweise längere Zeit keine Aktion ausführt, gibt es keine Mausklickereignisse, Mausradereignisse, Mausbewegungsereignisse usw. Wir müssen nur diese Ereignisse überwachen. Wenn diese Ereignisse längere Zeit nicht ausgelöst werden, bedeutet dies, dass der Benutzer längere Zeit keine Aktion ausgeführt hat, und dann kann die Route zur Anmeldeseite springen. Unter diesen drei Ereignissen habe ich das praktischere Mausklickereignis ausgewählt. Wir wissen, dass die erste Seite eines Projekts im Allgemeinen die Anmeldeseite ist. Wenn der Benutzer also auf der Anmeldeseite auf die Anmeldeschaltfläche klickt, wird die Zeit des Klickens auf die Anmeldeschaltfläche aufgezeichnet und im Sitzungsspeicher gespeichert. Beim Springen zur Hauptseite wird jedes Mal, wenn der Benutzer auf die Seite klickt, die im Sitzungsspeicher gespeicherte Zeit aktualisiert. Gleichzeitig ist ein Loop-Timer an die Seite gebunden. In regelmäßigen Abständen wird die aktuelle Zeit mit der Zeit des letzten im Sitzungsspeicher gespeicherten Klickereignisses verglichen. Wenn der Unterschied eine bestimmte Zeit überschreitet, wird der Benutzer gezwungen, zur Anmeldeseite zu wechseln. Code login.vue-Seite //html <el-button type="primary" @click="loginIn">Klicken Sie hier, um sich anzumelden</el-button> // js Methoden: { loginIn() { //Zeit des ersten Klicks speichern sessionStorage.setItem("lastClickTime", new Date().getTime()); //Simulieren Sie das Backend, um ein Token zurückzugeben sessionStorage.setItem('Token',"Token") dies.$router.push({ Weg: "/", }); }, } Home.vue-Seite <Vorlage> <div Klasse="HomeBox"> <!-- Links ist die Menüebene--> <div Klasse="links"> <div Klasse="leftNav"> <el-Menü :default-active="AktivIndex" Klasse="elMenu" Hintergrundfarbe = "#333" Textfarbe = "#B0B0B2" Aktiver Text-Color="#fff" :unique-opened="wahr" Router ref="elMenü" > <el-menu-item index="/vue"> <i class="el-icon-location-outline"></i> <span slot="title">Seite ansehen</span> </el-Menüelement> <el-menu-item index="/reagieren"> <i Klasse="el-icon-star-off"></i> <span slot="title">React-Seite</span> </el-Menüelement> <el-menu-item index="/angular"> <i class="el-icon-pear"></i> <span slot="title">Angular-Seite</span> </el-Menüelement> </el-Menü> </div> </div> <!-- Rechts ist die Ansichtshierarchie--> <div Klasse="rechts"> <div Klasse="rechtsOben"> <el-button type="primary" plain @click="loginOut">Abmelden</el-button> </div> <div Klasse="rightBottom"> <Router-Ansicht></Router-Ansicht> </div> </div> </div> </Vorlage> <Skript> Standard exportieren { Name: "Home", Daten() { zurückkehren { ActiveIndex: this.$route.path, Timer: null, }; }, erstellt() { /* Erster Schritt: Wenn die Komponente initialisiert und geladen ist, muss sie auf Klickereignisse warten. Hinweis: Der dritte Parameter von addEventListener sollte hier hinzugefügt werden. Da der dritte Parameter bestimmt, ob es sich um ein Sprudeln oder ein Erfassen handelt (false ist die Standardeinstellung für das Sprudeln, true für das Erfassen), erfassen wir Klickereignisse an der Position der obersten DOM-Ebene, da wir eine Bindung zum Abhören von Klickereignissen herstellen. Daher sollte der dritte Parameter true hinzugefügt werden, damit wir überall in der inneren Ebene auf Klickereignisse hören und dann die Klickzeit speichern können*/ Fenster.addEventListener( "klicken", () => { // Der Einfachheit halber speichern wir die Zeit des Klickereignisses direkt im SessionStorage, sodass sie leicht abgerufen und verglichen werden kann. sessionStorage.setItem("lastClickTime", new Date().getTime()); }, WAHR ); }, montiert() { /* Schritt 2: Wenn die Komponente initialisiert und geladen wird, muss ein Timer gebunden werden, um die Differenz zwischen der aktuellen Zeit und der letzten Klickzeit durch die regelmäßige Abfrage des Timers zu vergleichen*/ dies.istTimeOut(); }, Methoden: { istTimeOut() { // Bevor Sie den Timer verwenden, löschen Sie den Timer. clearInterval(this.timer); dieser.timer = setzeInterval(() => { let lastClickTime = sessionStorage.getItem("lastClickTime") * 1; // Wandelt die String-Zeit des letzten Klicks in eine digitale Zeit um let nowTime = new Date().getTime(); // Ruft die aktuelle Zeit ab console.log("Aktuelle Zeit und vorherige Klickzeit", nowTime, lastClickTime); // Angenommen, unsere Anforderung lautet: Wenn 5 Sekunden lang kein Klick ausgeführt wird, wird eine Aufforderung zum An- und Abmelden angezeigt, wenn (nowTime - lastClickTime > 1000 * 5) { // Fordern Sie den Benutzer dazu auf. $message({ Typ: "Warnung", Nachricht: "Zeitüberschreitung, abgemeldet" }); // Hier müssen wir den Timer löschen und die Aufgabe beenden clearInterval(this.timer); //Kehren Sie abschließend zur Anmeldeseite zurück. this.$router.push({ path: "/login" }); } }, 1000); }, }, vorZerstören() { // Der letzte Schritt besteht darin, den Timer zu löschen und die Bindung des Klickereignisses clearInterval(this.timer) beim Verlassen der Seite aufzuheben. window.removeEventListener("klicken", () => {}, true); }, }; </Skript> Bitte beachten Sie hier die hierarchische Entsprechung. Die hierarchische Beziehung meines Projekts besteht darin, dass die Home.vue-Seite eine innere Ebene der App.vue-Seite ist und es auch eine entsprechende Ansicht gibt und die Ansicht der Beziehung der gesamten Seite entspricht. Wählen Sie entsprechend der Beziehung zwischen der Hierarchie und der Router-Ansicht der Routing-Tabelle die entsprechende Hierarchie aus, um das entsprechende Klickereignis und den entsprechenden Timer zu binden. Das heißt, die hierarchische Beziehung besteht darin, die nächste Ebene parallel zur login.vue-Ebene auszuwählen. Andernfalls werden die Timer- und Klickbindungsereignisse auch auf der login.vue-Seite ausgeführt. Rendern Backend-Steuerung (Methode 2) Ideen Diese Back-End-Steuerungsmethode ist nicht so restriktiv wie die Front-End-Steuerung, kann aber ebenfalls verwendet werden. Das Backend verwendet den JWT-Mechanismus, um den zurückgegebenen Statuscode zu steuern Code Hier mounten wir das Instanzobjekt von Vue in main.js in das globale Objektfenster, damit wir die Routing-Jump-Methode auf dem VM-Objekt im Antwort-Interceptor verwenden können main.js-Datei // Auf dem Fensterobjekt montiert window.vm = new Vue({ speichern, Router, rendern: h => h(App), }).$mount('#app') Antwort-Interceptor-Datei http.interceptors.response.use((res) => { console.log('Global registrieren',vm); var code = res.data.code; if(code == 4567){ // 4567 ist der Timeout-Statuscode. Wenn wir dieses Zeichen sehen, werden wir den Benutzer auffordern, sich abzumelden. // Beachten Sie, dass der Routensprung zu diesem Zeitpunkt nicht this.$router.push() ist. vm._router.push({ path: "/login" }); } Rückgabewert.Daten }, (Fehler) => { // console.log(Fehler) returniere Promise.reject(Fehler); }) VM-Instanzobjekt drucken Der Routensprung im Antwort-Interceptor wird also zu vm._router.push({ path: "/login" }) ZusammenfassenDie beiden oben genannten Methoden können verwendet werden. Welche Methode verwendet wird, hängt von der Situation ab. Damit ist dieser Artikel über zwei Möglichkeiten zum Abmelden auf der Anmeldeseite abgeschlossen, wenn Vue-Benutzer längere Zeit nicht arbeiten. Weitere relevante Inhalte zum Abmelden, wenn Vue-Benutzer längere Zeit nicht arbeiten, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Fassen Sie einige häufige Rankingprobleme in MySQL zusammen
>>: Detailliertes Tutorial zur Verwendung des Befehls xargs unter Linux
Popup-Nachrichten sind bei inländischen Internetd...
Inhaltsverzeichnis Vorwort Virtueller DOM Was ist...
Inhaltsverzeichnis Was ist ein binärer Suchbaum (...
Vorwort Nach der Installation von MySQL und Navic...
Inhaltsverzeichnis 1 Systemeinführung 2 Systemver...
Die verständlichste Erklärung des Genauigkeitspro...
Inhaltsverzeichnis Warum day.js verwenden? Moment...
Hintergrund Haben Sie sich jemals gefragt, wie Si...
Wissenspunkt 1: Legen Sie die Basis-URL der Webse...
Inhaltsverzeichnis 1. Erstellen Sie ein Redis-Doc...
Installationsreihenfolge rpm -ivh mysql-community...
Vor Kurzem habe ich mit shake.js eine ähnliche Fu...
Der Ereignisplaner in MySQL, EVENT, wird auch als...
Inhaltsverzeichnis 1. setState() Beschreibung 1.1...
Vorwort Vor kurzem habe ich mir abends etwas Zeit...