Der praktische Prozess des Login-Status-Managements im vuex-Projekt

Der praktische Prozess des Login-Status-Managements im vuex-Projekt

Werkzeug:

Installieren Sie Vue.js devtools im Chrome-Browser für einfaches Debuggen

Anmeldeszenario:

Der aktuelle Anmeldestatus des Benutzers wird manchmal in der Seitennavigation oder an anderen Stellen angezeigt. Der Status kann in folgende Kategorien unterteilt werden: nicht angemeldet, Anmeldung (wird geladen), erfolgreich angemeldet und Anzeige des Benutzernamens.

Manche Seiten können von Benutzern ohne Anmeldung durchsucht werden, bei manchen Seiten ist jedoch eine Anmeldung erforderlich, bevor sie durchsucht werden können.

üben:

Szenario 1: Denken und Üben

Erstellen eines Datenspeichers mit Vuex

//Erstellen Sie ein neues Store-Verzeichnis unter dem src-Verzeichnis und erstellen Sie index.js wie folgt //Erstellen Sie ein Data Warehouse, importieren Sie Vuex von „vuex“;
importiere vue von „vue“;
importiere loginUser aus „loginUser.js“
Vue.Verwenden(Vuex)

const store = neuer Vuex.Store({
    Module: { //Module können verschiedene Zustände in einem eigenen Objekt unterbringen loginUser //Ob Sie sich gerade anmelden},
    strict: true, //Erlaube nur Zustandsänderungen durch Mutationen });

Legen Sie den Anmeldestatus „Laden“ und den aktuell angemeldeten Benutzer fest.

//Erstellen Sie ein loginUser.js und erstellen Sie dessen Status/Mutationen/Aktionen

//Der Status, der beibehalten werden muss state: {
       loading: false, //Anmeldestatus Benutzer: null, //Derzeit angemeldeter Benutzer},
//Berechnete Eigenschaftsgetter: {
       Status(Zustand) {
           wenn (Zustand.Laden) {
               Rückgabewert 'Laden'
           } sonst wenn (Status.Benutzer) {
               returniere 'login'
           } anders {
               returniere 'unLogin'
           }
       }
   },
 
 //Laden und Benutzerstatusmutationen ändern: {
       //Laden einstellen
       setLoading(Zustand, Nachricht) {
           Zustand.Laden = Nachricht
       },
       //Benutzer festlegen setUser(state, msg) {
           Status.Benutzer = Nachricht
       }
   },
 
 //Übermitteln Sie den geänderten Status in Aktionen actions: {
       //Die Login-Methode ctx entspricht store
       asynchrone Anmeldung(ctx, msg) {
           //Setze den Login-Status auf true
           ctx.commit("setLoading", wahr)
           const Ergebnis = warte auf xxxapi.login(msg.loginId, msg.loginPassword)
           wenn (Ergebnis) {
               //Anmeldung erfolgreich ctx.commit('setUser', result)
               //Nach erfolgreichem Login wird der Login-Status auf false gesetzt
               ctx.commit('setLoading', falsch)
           }
           //Gibt zurück, ob die Anmeldung erfolgreich war. Ergebnis zurückgeben
       },
       //Beurteilen Sie, ob Sie sich angemeldet haben async isLogin(ctx) {
           //Anmeldung ctx.commit('setLoading', true)
           //Rufen Sie die Schnittstelle auf, um zu sehen, ob sie angemeldet ist. const result = await xxxapi.isLogin();
           ctx.commit('setUser', Ergebnis);
           ctx.commit('setLoading', false)
       },
       //Abmelden async logout(ctx) {
           ctx.commit('setLoading', falsch)
           warte auf xxxapi.logout();
           ctx.commit('setUser', null);
           ctx.commit('setLoading', falsch)
       }
   },

Seitennutzung:

Beim Anmelden gibt es eine Anmeldeschaltfläche, und wir können den Status der Schaltfläche im Vuex-Lager abrufen

<button :disabled="loading">{{ wird geladen ? 'wird geladen...' : 'Anmelden' }}
</button>
berechnet: {
//Kapseln Sie das Laden in die berechnete Datei, damit Sie this.$store.state.loginUser nicht bei jedem Aufruf schreiben müssen. // loading() {
    // gib dies zurück.$store.state.loginUser.loading;
    // }
    // Optimierung // Hilfsfunktion // importiere {mapState} von "vuex"
    ...mapState({
      wird geladen: (Status) => Status.loginUser.loading
    })
  }

Auslösen der Aktion beim Absenden durch Klicken auf die Schaltfläche

asynchroner handleSubmit() {
      const Ergebnis = warte hierauf.$store.dispatch("loginUser/login", {
        Login-ID: diese.Login-ID,
        Anmeldekennwort: dieses.Anmeldekennwort
      });
      wenn (Ergebnis) {
        // Anmeldung erfolgreich Routensprung const path = this.$route.query.url || '/'
        this.$router.push(Pfad)
      }
    },

Umschalten des Login-Status in der Seitennavigation [Laden/Anmelden/Abmelden]

  <!-- Anmeldestatus der Seite anzeigen-->
<span v-if="status === 'loading'">Anmeldung wird durchgeführt, bitte warten...</span>
​
<template v-else-if="status === 'anmelden'">
    <span>Derzeit angemeldeter Benutzer {{user.name}}</span>
    <span @click="handleLogout">Abmelden</span>
</Vorlage>
​
<router-link to="/login" v-else>
        Anmelden</router-link>
  berechnet: {
...mapGetters("loginUser", ["status"]),
...mapState("loginUser", ["Benutzer"]),
}

Status beim Abmelden ändern

asynchroner handleLogout(){
    warte darauf.$store.dispatch("loginUser/logout")
    //Zur Anmeldeseite springen this.$route.push(/xxx)
},

Der Anmeldestatus muss bei jeder Aktualisierung der Seite überprüft werden. Dies muss in main.js ermittelt werden, wenn vue erstellt wird.
store.dispatch('loginUser/isLogin')

Szenario 2: Denken und Üben

Beachten Sie die Berechtigungseinstellungen im Hintergrundprojekt

Gesamtkonzept:

Überprüfen Sie nach dem Aktualisieren der Seite zunächst den Anmeldestatus im Vuex-Warehouse. –> Der Navigation Guard (router.beforeEach) erkennt anhand der in Meta festgelegten Parameter, ob diese Seite angemeldet ist.

Zum Anzeigen müssen Sie sich anmelden --> Seitendarstellung.

Allgemeine Logik:

1. Stellen Sie beim Aufrufen der Seite fest, ob zum Anzeigen dieser Seite eine Anmeldung erforderlich ist

2. Ermitteln Sie den Anmeldestatus. Es gibt die folgenden drei Zustände:

  1. Wenn Sie bereits angemeldet sind, gelangen Sie direkt auf die gewünschte Seite.
  2. Wenn der Benutzer nicht angemeldet ist, gehen Sie zur Anmeldeseite und lassen Sie den Benutzer sich anmelden.
  3. Wenn der Status „Laden“ lautet, geben Sie den Pfad der Seite ein, zu der Sie wechseln möchten, und überwachen Sie die Änderungen des Anmeldestatus des Benutzers im Vuex-Warehouse auf der Ladeseite. Nachdem Sie die Statusänderungen überwacht haben, ist er entweder angemeldet oder nicht angemeldet. Fahren Sie dann mit Schritt 1 fort, um festzustellen, ob eine Anmeldeberechtigung erforderlich ist.

üben:

Legen Sie Metadaten im Router fest. Wenn die Authentifizierung wahr ist, müssen Sie sich anmelden, um darauf zugreifen zu können.

//Home aus "./xx/xx.vue" in routes.js importieren
Exportstandard[
{
      Pfad: „/home“,
    Komponente:Home,
    Meta: {
      auth: true, //Seiten, für deren Zugriff Berechtigungen erforderlich sind}
}
]
Setzen Sie den Routenschutz in index.js router.beforeEach((to, from, next) => {
    wenn (to.meta.auth) {
        // Für den Zugriff ist eine Anmeldeberechtigung erforderlich const result = store.getters["loginUser/status"]
        if (Ergebnis === 'wird geladen') {
            // Ladestatus, ich weiß nicht, ob Sie angemeldet sind // Springen Sie zu einer Seite, auf der Sie sich anmelden, und überwachen Sie, ob die Anmeldung auf der Seite erfolgreich war, sonst bleibt sie für immer hier // Und wenn die Route springt, müssen Sie aufzeichnen, woher Sie vorher gekommen sind, sonst wissen Sie nicht, zu welcher Seite Sie als nächstes springen sollen ({
                Pfad: '/loading', //Gehe zur Seite [Anmelden] query: {
                    URL: zu.vollständigerPfad
                }
            })
        } sonst wenn (Ergebnis === 'login') {
            // Anmeldung erfolgreichnext();
        } anders {
            // Nicht angemeldet this.$message.info('Sie müssen sich anmelden');
             nächste({
                Pfad: '/login', //Zur Seite [Anmelden] gehen query: {
                    URL: zu.vollständigerPfad
                }
            })
        }
    } anders {
        //Seiten, auf die ohne Login-Berechtigung zugegriffen werden kann next()
    }
})

Überwachen Sie den aktuellen Status auf der Anmeldeseite

erstellt() {
  this.unWatch = this.$watch(() => this.$store.getters["loginUser/status"], (status) => {
    console.log('aktueller Status', Status);
    wenn (Status !== 'wird geladen'){
      dies.$router.push(diese.$route.query.url || '/home').catch(() => {}
    }
  }, {
    sofort: wahr
  })
},
zerstört() {
  //Überwachung abbrechen this.unWatch()
}

Zusammenfassen

Dies ist das Ende dieses Artikels über die Verwaltung des Anmeldestatus in Vuex-Projekten. Weitere relevante Inhalte zur Verwaltung des Anmeldestatus von Vuex 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:
  • Detaillierte Erklärung des Vuex-Management-Anmeldestatus
  • Beispielcode zum Speichern des Benutzeranmeldestatus in Vue
  • So registrieren Sie sich und bleiben bei Vue angemeldet
  • So bleibt der Benutzer im Vue-Projekt angemeldet (localStorage+vuex behält den Status nach dem Aktualisieren der Seite bei)

<<:  Vor- und Nachteile von MySQL-Indizes und Richtlinien zum Erstellen von Indizes

>>:  Detaillierte Erläuterung der Verwendung des DockerHub-Image-Repository

Artikel empfehlen

Neunundvierzig JavaScript-Tipps und Tricks

Inhaltsverzeichnis 1. Betrieb von js Integer 2. S...

5 MySQL-GUI-Tools, die Ihnen bei der Datenbankverwaltung empfohlen werden

Es gibt viele Datenbankverwaltungstools für MySQL...

Detaillierte Erklärung der Rolle und des Prinzips des Schlüssels in Vue

Inhaltsverzeichnis 1. Beginnen wir mit dem Fazit ...

HTML-Tabellen-Tag-Tutorial (26): Zellen-Tag

Die Attribute des <TD>-Tags werden verwende...

Vue-Methode zum Überprüfen, ob der Benutzername verfügbar ist

In diesem Artikelbeispiel wird der spezifische Co...

Mysql SQL-Anweisungsvorgang zum Hinzufügen oder Ändern des Primärschlüssels

Tabellenfelder hinzufügen alter table table1 add ...

Tutorial zur Verwendung von Hyperlink-Tags in XHTML

Hyperlink, auch „Link“ genannt. Man kann sagen, d...

So finden Sie Informationen zu nicht festgeschriebenen Transaktionen in MySQL

Vor einiger Zeit habe ich einen Blogbeitrag mit d...

JavaScript-Sandbox-Erkundung

Inhaltsverzeichnis 1. Szenario 2. Grundfunktionen...

Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort vergessen?

Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort ve...

Wie verstecke ich einen bestimmten Text in HTML?

Code zum Ausblenden von Text, Ausblenden eines bes...

Eine kurze Analyse der Crontab-Aufgabenplanung in Linux

1. Erstellen Sie eine Planungsaufgabe Anweisung c...