Über Vue, um wiederholte Eingabeaufforderungen beim Aktualisieren der Seite nach Ablauf des Tokens zu vermeiden

Über Vue, um wiederholte Eingabeaufforderungen beim Aktualisieren der Seite nach Ablauf des Tokens zu vermeiden

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änomen

Die 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. Ursachenanalyse

Die 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ösung

3.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:
  • SpringBoot JWT implementiert eine Token-Login-Aktualisierungsfunktion
  • Detaillierte Erklärung der schmerzlosen Token-Aktualisierungsmethode von Uniapp
  • Detaillierte Erklärung des JWT-Aktualisierungstokens in der ASP.NET Core Web API
  • Automatische Aktualisierung des Token-Vorgangs, wenn das Token während der Anforderung abläuft
  • Implementierung der automatischen Aktualisierung von SpringSecurity Jwt Token
  • Analyse des Aktualisierungstokenprozesses basierend auf Springboot+JWT
  • Beispielcode des Axios-Interceptor-Token-Aktualisierungsmechanismus unter Vue
  • Laravel (Lumen) löst das Problem des JWT-Auth-Aktualisierungstokens
  • So erreichen Sie eine nahtlose Token-Aktualisierung

<<:  Lösen Sie die MySQL-Deadlock-Routine, indem Sie verschiedene Indizes aktualisieren

>>:  Zabbix3.4-Methode zum Überwachen des MongoDB-Datenbankstatus

Artikel empfehlen

Lassen Sie uns ausführlich über den Symboldatentyp in ES6 sprechen

Inhaltsverzeichnis Symboldatentyp Der Grund, waru...

js Array-Einträge () Holen Sie sich die Iterationsmethode

Inhaltsverzeichnis 1. Detaillierte Syntax der Met...

In JavaScript integrierter Zeit- und Datumsformatierungsbeispielcode

1. Grundkenntnisse (Methoden von Datumsobjekten) ...

So bereinigen Sie regelmäßig Bilder, die über Jenkins „None“ sind

Vorwort Wenn beim kontinuierlichen Code-Delivery-...

Implementierung der Nginx-Arbeitsprozessschleife

Nach dem Start initialisiert der Worker-Prozess z...

Detaillierte Erklärung zu MySQL und Springs Autocommit

1 MySQL Autocommit-Einstellungen MySQL führt stan...

JS implementiert Karussell mit mehreren Tabs

Karussell-Animationen können das Erscheinungsbild...

So konfigurieren Sie inländische Quellen in CentOS8 yum/dnf

CentOS 8 hat das Installationsprogramm für Softwa...

25 CSS-Frameworks, Tools, Software und Vorlagen geteilt

Kobold-Kuh herunterladen CSS-Fussel herunterladen...

Berechnungstabelle für die RGBA-Alpha-Transparenzkonvertierung

Konvertierung zwischen RGBA- und Filterwerten unt...

Zusammenfassung der drei Regeln für die React-Statusverwaltung

Inhaltsverzeichnis Vorwort Nr.1 Ein Fokus Nr. 2 E...