Wenn das Token abläuft, aktualisieren Sie die Seite. Wenn die Seite beim Laden mehrere Anfragen an das Backend initiiert, werden wiederholt Alarmaufforderungen ausgegeben. Nach der Verarbeitung wird der Alarm nur einmal ausgelöst. 1. ProblemphänomenDie Seite wurde lange Zeit nicht bedient. Wenn Sie die Seite aktualisieren, erscheint zum ersten Mal die Eingabeaufforderung „Token abgelaufen, bitte erneut anmelden!“, dann springt man zur Anmeldeseite und dann erscheinen n Backend-Rückmeldungen mit der Meldung „Token abgelaufen“. 2. UrsachenanalyseDie aktuelle Seite wird initialisiert und es erfolgen mehrere Aufrufe zum Abfragen von Systemparametern vom Backend. Der Code lautet wie folgt: erstellt () { //= ... // Die erforderlichen Systemparameter abrufen. Hinweis: Die Methode getParameterClass lädt Daten asynchron. // Wenn Sie Beobachtungen ausdrucken müssen, müssen Sie sie über die Überwachung verarbeiten. // Rufen Sie die Parameterkategorie des Benutzertyps ab. this.commonFuncs.getParameterClass(this,"user_type","userTypeList","userTypeMap"); // Holen Sie sich die Parameterkategorie des Benutzerstatus für (var i = 0; i < this.userStatusList.length; i++) { var item = diese.userStatusList[i]; var mapKey = parseInt(item.itemKey); dies.userStatusMap.set(mapKey, item); } // Holen Sie sich die Parameterklasse des Geschlechts this.commonFuncs.getParameterClass(this,"gender","","genderMap"); // Parameterklasse der Abteilung abrufen this.commonFuncs.getParameterClass(this,"department","","deptMap"); // Parameterkategorie der Rolle abrufen this.commonFuncs.getParameterClass(this,"role","","roleMap"); // Benutzerdatensätze abfragen this.queryUsers(); }, Diese Anfragen, bei denen es sich um Axios-Aufrufe handelt, werden asynchron ausgeführt, sodass diese Anfragen beim Aktualisieren der Seite fast sofort gestellt werden. Anschließend werden die Antworten auf diese Anfragen nacheinander zurückgesendet. Die Antwort wird zunächst vom folgenden Antwort-Interceptor verarbeitet: // Token-bezogener Antwort-Interceptor instance.interceptors.response.use(response => { wenn (Antwort) { Schalter (Antwort.Daten.Code) { Fall 3: //Token ist leer Fall 4: //Token abgelaufen Fall 5: //Token ist falsch localStorage.clear(); //Benutzerinformationen löschen alert('Token ist ungültig, bitte melden Sie sich erneut an!'); // Um zur Anmeldeseite zu springen router.replace({ Pfad: '/login', }); brechen; Fall 6: //Zugriff verweigert// Zur Seite 403 springen router.replace({ Pfad: '/verboten', }); brechen; Standard: brechen; } } Antwort zurückgeben; }, Fehler => { return Promise.reject(error.response.data.message) //Gibt die von der Schnittstelle zurückgegebene Fehlermeldung zurück}) Geben Sie anschließend den Code dort ein, wo die Anfrage aufgerufen wird: diese.Instanz.getParameterClass( dies.$baseUrl, {"Klassenschlüssel" : Klassenschlüssel} ).dann(res => { //Konsole.log(res.data); wenn (res.data.code == parent.global.SucessRequstCode){ // Wenn die Abfrage erfolgreich ist // Erfolgscode... }anders{ Alarm (res.data.message); } }).fangen(Fehler => { //alarm('Abfrage der Systemparameter fehlgeschlagen!'); konsole.log(Fehler); }); Nun die Frage: Wenn bei einer Anforderung das Token abläuft, zeigt der Antwort-Interceptor zuerst eine Warnmeldung an, und anschließend wird auf der Aufrufseite eine weitere Meldung angezeigt: Alarm (res.data.message); Dies wiederholt sich. Bei mehreren gleichzeitig gesendeten Anfragen ist ein Marker erforderlich, der daran erinnert, ob der Ablauf des Tokens angezeigt wurde. Die Anzeige erfolgt nur einmal. Wenn sie angezeigt wurde, ist keine erneute Anzeige erforderlich. 3. Lösung3.1. Eliminieren Sie wiederholte Erinnerungen an den Ablauf des Tokens in Interceptors und Anforderungsaufrufen Schreiben Sie eine öffentliche Methode, um zu prüfen, ob es sich um den Rückgabecode der abgefangenen Verarbeitung handelt, und fügen Sie sie in die Datei /src/common/commonFuncs.js ein. Der Code lautet wie folgt: /** * Bestimmen Sie, ob der Rückgabecode der Anforderung abgefangen wurde. Gibt true zurück, um anzuzeigen, dass die Anforderung abgefangen wurde. * Diese Methode wird auf der aufrufenden Site verwendet. Die Fehlermeldung des abgefangenen Rückgabecodes muss nicht verarbeitet werden. * @param {Rückgabecode der Anforderung} Code */ istInterceptorCode(code){ Schalter (Code) { Fall 3: //Token ist leer. Fall 4: //Token abgelaufen. Fall 5: //Token ist falsch. Fall 6: //Zugriff verboten. return true; Standard: brechen; } gibt false zurück; } Anschließend werden alle Aufrufe zur Behandlung nicht erfolgreicher Rückgaben wie folgt geändert: wenn (!this.commonFuncs.isInterceptorCode(res.data.code)){ Alarm (res.data.message); } Auf diese Weise werden doppelte Warnmeldungen für die Abhör- und Anrufverarbeitung vermieden. 3.2. Mehrere Anfragen mit nur einer Eingabeaufforderung verarbeiten Fügen Sie in der globalen Variablendatei /src/common/global.js das Flag „Token ungültig“ hinzu. Der Code lautet wie folgt: //globale Variable export default { // Rückgabewert für erfolgreiche Anfrage SucessRequstCode: 0, // Token ungültiges Flag TokenInvalidFlag: 0 } Ändern Sie dann den Interceptor-Code: // Token-bezogener Antwort-Interceptor instance.interceptors.response.use(response => { wenn (Antwort) { Schalter (Antwort.Daten.Code) { Fall 0: //Normal// Token-Ungültigkeitsflag zurücksetzen Setze global.TokenInvalidFlag = 0; brechen; Fall 3: //Token ist leer Fall 4: //Token abgelaufen Fall 5: //Token ist falsch localStorage.clear(); //Benutzerinformationen löschen if (global.TokenInvalidCounter == 0){ alert('Token abgelaufen, bitte erneut anmelden!'); } //Setze das Token-Ungültigkeitsflag auf 1 global.TokenInvalidFlag = 1; // Um zur Anmeldeseite zu springen router.replace({ Pfad: '/login', }); brechen; Fall 6: //Zugriff verweigert// Zur Seite 403 springen router.replace({ Pfad: '/verboten', }); brechen; Standard: brechen; } } Antwort zurückgeben; }, Fehler => { return Promise.reject(error.response.data.message) //Gibt die von der Schnittstelle zurückgegebene Fehlermeldung zurück}) Das heißt, wenn die Token-Ablaufnachricht zum ersten Mal empfangen wird (TokenInvalidFlag = 0 zu diesem Zeitpunkt), wird eine Eingabeaufforderung ausgegeben und dann auf 1 gesetzt (TokenInvalidFlag = 1 zu diesem Zeitpunkt). Für die Antworten auf die nachfolgenden Anfragen werden keine Warnaufforderungen ausgegeben. Es wird auf 0 zurückgesetzt, bis ein erfolgreicher Rückgabecode empfangen wird, der anzeigt, dass die erneute Anmeldung erfolgreich war. Nach dem Testen erzielt diese Verarbeitung den erwarteten Effekt, d. h. wenn das Token abläuft, wird die Seite aktualisiert und nur ein Alarm ausgelöst. Autor: Arab 1999 Quelle: http://www.cnblogs.com/alabo1999/ Das Urheberrecht an diesem Artikel liegt beim Autor und bei Cnblog Park. Nachdrucke sind willkommen, diese Erklärung muss jedoch ohne Zustimmung des Autors beibehalten werden und der Originallink muss an prominenter Stelle auf der Artikelseite angegeben werden, andernfalls bleiben rechtliche Schritte vorbehalten. Entwickeln Sie gute Gewohnheiten und geben Sie guten Artikeln einen Daumen hoch. Dies ist das Ende dieses Artikels darüber, wie Vue wiederholte Aufforderungen zum Aktualisieren der Seite nach Ablauf des Tokens eliminiert. Weitere relevante Inhalte zum Aktualisieren der Seite durch Vue finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Lösen Sie die MySQL-Deadlock-Routine, indem Sie verschiedene Indizes aktualisieren
>>: Zabbix3.4-Methode zum Überwachen des MongoDB-Datenbankstatus
Inhaltsverzeichnis Symboldatentyp Der Grund, waru...
Inhaltsverzeichnis 1. Detaillierte Syntax der Met...
1. Grundkenntnisse (Methoden von Datumsobjekten) ...
Vorwort Wenn beim kontinuierlichen Code-Delivery-...
Nach dem Start initialisiert der Worker-Prozess z...
1 MySQL Autocommit-Einstellungen MySQL führt stan...
Inhaltsverzeichnis 1. Hintergrund 2. Verifizierun...
Fehlermeldung: Benutzer: „root“, Host: „localhost...
Karussell-Animationen können das Erscheinungsbild...
CentOS 8 hat das Installationsprogramm für Softwa...
Kobold-Kuh herunterladen CSS-Fussel herunterladen...
Konvertierung zwischen RGBA- und Filterwerten unt...
Inhaltsverzeichnis Vorwort Nr.1 Ein Fokus Nr. 2 E...
1. Einleitung Beim Schreiben einer Seite stoßen w...
Bei der heutigen Installation von MySQL erscheint...