Gemeinsame Überprüfung beider Vue-Felder zur Realisierung der Kennwortänderungsfunktion

Gemeinsame Überprüfung beider Vue-Felder zur Realisierung der Kennwortänderungsfunktion

1. Einleitung

Dieser Artikel ist der vorherige Artikel „Validierungsregeln für Vue Element-ui-Formulare. Welche kennen Sie?“ 》Typische Anwendung für die Überprüfung von Verbindungen in mehreren Feldern.

Bei einer Passwortänderung ist grundsätzlich eine zweimalige Bestätigung der Konsistenz des Passwortes über zwei Attributfelder erforderlich. Ähnliche Situationen mit zwei Attributfeldern sind:

  • Datums- und Zeitbereich. Wenn beide Werte haben, lautet die Anforderung: Endzeit >= Startzeit.
  • Mengenverhältnis: Mengenuntergrenze <= Mengenobergrenze.

Die Besonderheit besteht darin, dass beide Attributwerte variabel sind. In diesem Dokument wird die Konsistenzanwendung zur Überprüfung zweier Passwörter verwendet, um eine typische Lösung für die gemeinsame Überprüfung zwischen zwei Feldern variabler Attributwerte bereitzustellen.

2. Implementierung der Lösung

2.1 Implementierungscode

Geben Sie zunächst den Formularcode ein:

<Vorlage>
  <div id="Inhaltswrapper">
    <h5 class="heading" align=left>Benutzerverwaltung/Passwort ändern</h5>
    <!-- Trennzeichen -->
    <el-Teiler></el-Teiler>    
    <el-form ref="form" :model="form" :rules="Regeln" label-width="100px">
      <el-form-item label="Ursprüngliches Passwort:" prop="oldPasswd">
        <el-input v-model="form.oldPasswd" :Typ="Passwort">
          <!-- Um der Eingabe ein Symbol hinzuzufügen, müssen Sie über das Attribut slot="suffix" verfügen, sonst kann das Symbol nicht angezeigt werden-->
          <i slot="suffix" :class="icon" @click="showPassword"></i>
        </el-Eingabe>
      </el-form-item>   
      <el-form-item label="Neues Passwort:" prop="newPasswd">
        <el-input v-model="form.newPasswd" :Typ="Passwort">
          <i slot="suffix" :class="icon" @click="showPassword"></i>
        </el-Eingabe>
      </el-form-item>   
      <el-form-item label="Passwort bestätigen:" prop="confirmPasswd">
        <el-input v-model="form.confirmPasswd" :Typ="Passwort">
          <i slot="suffix" :class="icon" @click="showPassword"></i>
        </el-Eingabe>
      </el-form-item>   
      <el-form-item>
        <el-button type="primary" style="width:160px" size="small" @click="submit()">OK</el-button>
        <el-button type="primary" style="width:160px" size="small" @click="cancel()">Abbrechen</el-button>
      </el-form-item>      
    </el-form>
  </div>
</Vorlage>
<Skript>
  importiere {passwordValidator} aus '@/common/validator.js'
  Standard exportieren {
    Daten() {
      // Zwei Passwörter vergleichen um zu sehen ob sie gleich sind const comparePasswdValidator = (rule, value, callback) => {
        // Methode zum Abrufen von Werten abrufen var getvaluesMethod = rule.getValuesMethod;
        //Rufen Sie die Methode getvaluesMethod auf, um den Objektwert abzurufen. var formData = getvaluesMethod();
        
        // Eines ist leer, möglicherweise wurde kein Wert eingegeben, kein Vergleich zu diesem Zeitpunkt if (formData.newPasswd == '' || formData.confirmPasswd == ''){
          Rückruf zurückgeben();
        }

        //==================================================================
        // Zwei Passwörter vergleichen // Beide haben Werte, vergleichen, wenn (formData.newPasswd == formData.confirmPasswd){
          // Das neue Passwort stimmt mit dem bestätigten Passwort überein // Löschen Sie zuerst die Warnmeldungen zur Überprüfung der beiden Passwörter. Löschen Sie jetzt die inkonsistente Meldung des anderen Passworts this.$refs['form'].clearValidate(['newPasswd','confirmPasswd']);
          Rückruf();
        }anders{
          callback(new Error('Die beiden Passwörter stimmen nicht überein'));
        }
      }

      zurückkehren {
        bilden : {
          altesPasswort: '',
          neuesPasswort: '',
          Passwort bestätigen: ''
        },
        //Dient zum Ändern des Eingabetyps Passwort: „password“,  
        //Wird verwendet, um das Symbol im Eingabesymbol zu ersetzen: "el-input__icon el-icon-view", 
        // Konfigurationsregeln für die Überprüfungsregel: {
          altesPasswort: [
            {erforderlich: true, Nachricht: „Das Passwort darf nicht leer sein“, Auslöser: ‚blur‘}
          ],          
          neuesPasswort: [
            {erforderlich: true, Nachricht: „Das neue Passwort darf nicht leer sein“, Auslöser: ‚blur‘},
            {min: 6, max: 18, Nachricht: "Neues Passwort 6-18 Ziffern", Auslöser: 'blur'},
            {validator: passwordValidator, Auslöser: "blur"},
            {Validator: comparePasswdValidator, Auslöser: "unscharf", "getValuesMethod": this.getValuesMethod},
          ],     
          Passwort bestätigen: [
            {erforderlich: true, Nachricht: „Das Kennwort darf nicht leer sein“, Auslöser: ‚blur‘},
            {min: 6, max: 18, Nachricht: "Passwort bestätigen (6-18 Ziffern)", Auslöser: 'blur'},
            {validator: passwordValidator, Auslöser: "blur"},
            {Validator: comparePasswdValidator, Auslöser: "unscharf", "getValuesMethod": this.getValuesMethod},
          ],                   
        },        
      }
    },
    Methoden: {
      // Methode zum Abrufen von Werten. Verwenden Sie getValuesMethod() für alle Validierer, die eine gemeinsame Validierung mehrerer Felder erfordern {
        gib dieses Formular zurück;
      },

      //Passwort ausblenden und anzeigenshowPassword(){
        //Klicken Sie auf das Symbol, um das Passwort auszublenden oder anzuzeigen, if( this.password=="text"){
            this.password="Passwort";
            //Symbol ändern this.icon="el-input__icon el-icon-view";
        }anders {
            dieses.Passwort="Text";
            this.icon="el-input__icon el-icon-Stoppuhr";
        }
      },
      
      //Senden submit(){
        lass _this = dies;
        dies.$refs['form'].validate(valid => {
          // Wenn die Überprüfung erfolgreich war, ist es wahr, wenn sie fehlschlägt, ist es falsch
          if (gültig) {
            _this.instance.changePasswd(_this.$baseUrl,_this.form).then(res => {
              wenn (res.data.code == _this.global.SucessRequstCode){
                // Meldung, dass die Änderung erfolgreich war alert("Das Zurücksetzen des Passworts war erfolgreich!");
                // Zur Startseite springen this.$router.push({
                  Pfad: '/home',
                });                
              }anders{
                wenn (!_this.commonFuncs.isInterceptorCode(res.data.code)){
                  Alarm (res.data.message);
                }
              }              
            }).fangen(Fehler => {
              konsole.log(Fehler);
            }); 
          }          
        })
      },

      //Abbrechen cancel(){
        // Zur Startseite springen this.$router.push({
          Pfad: '/home',
        });            
      }
    }
  }
</Skript>

Der importierte externe Validator passwordValidator befindet sich in der Datei /src/common/validator.js. Der Code lautet wie folgt:

/* Passwortüberprüfung */
Exportfunktion passwordValidator(Regel, Wert, Rückruf) {
  const reg = /^[_a-zA-Z0-9@.#%&*!\-\$^]+$/;
  wenn(Wert == '' || Wert == undefiniert || Wert == null){
    Rückruf();
  } anders {
    wenn (!reg.test(Wert)){
      callback(new Error('Das Passwort besteht aus englischen Buchstaben, Zahlen und den folgenden Zeichen: @.#%&*!_-$^'));
    } anders {
      Rückruf();
    }
  }
}

2.2 Codebeschreibung

2.2.1. Regelkonfiguration:

  // Konfigurationsregeln für die Überprüfungsregel: {
      altesPasswort: [
        {erforderlich: true, Nachricht: „Das Passwort darf nicht leer sein“, Auslöser: ‚blur‘}
      ],          
      neuesPasswort: [
        {erforderlich: true, Nachricht: „Das neue Passwort darf nicht leer sein“, Auslöser: ‚blur‘},
        {min: 6, max: 18, Nachricht: "Neues Passwort 6-18 Ziffern", Auslöser: 'blur'},
        {validator: passwordValidator, Auslöser: "blur"},
        {Validator: comparePasswdValidator, Auslöser: "unscharf", "getValuesMethod": this.getValuesMethod},
      ],     
      Passwort bestätigen: [
        {erforderlich: true, Nachricht: „Das Kennwort darf nicht leer sein“, Auslöser: ‚blur‘},
        {min: 6, max: 18, Nachricht: "Passwort bestätigen (6-18 Ziffern)", Auslöser: 'blur'},
        {validator: passwordValidator, Auslöser: "blur"},
        {Validator: comparePasswdValidator, Auslöser: "unscharf", "getValuesMethod": this.getValuesMethod},
      ],                   
    },

Der Fokus liegt auf den Attributen newPasswd und confirmPasswd. Für beide ist derselbe Regelsatz konfiguriert und die Validierungsregeln lauten:

  • Der Wert darf nicht leer sein.
  • Der Wert muss 6 bis 18 Zeichen lang sein.
  • Das Passwort entspricht der passwordValidator-Regel, d. h. das Passwort besteht aus englischen Buchstaben, Zahlen und den folgenden Zeichen: @.#%&*!_-$^.
  • Compare Password Validator comparePasswdValidator, dieser Validator fügt ein benutzerdefiniertes Attribut getValuesMethod hinzu, der Attributwert ist diese getValuesMethod-Methode, beachten Sie, dass es eine Methode ist, kein Methodenname. Diese Regel erfordert, dass in den Methoden eine Methode getValuesMethod vorhanden ist und dass der Validator comparePasswdValidator implementiert ist.

Diese Regeln arbeiten zusammen. Alle Regeln müssen die Prüfung bestehen, bevor die Attributprüfung erfolgreich ist, und die Erkennungsreihenfolge wird in der Reihenfolge des Arrays ausgeführt.

In den Validierungsregeln werden sowohl die Attribute newPasswd als auch confirmPasswd mit demselben comparePasswdValidator konfiguriert, da die Attributwerte beider Felder variabel sind. comparePasswdValidator ist die letzte Regel, was bedeutet, dass sie zuerst die vorherigen Validierungsregeln erfüllen muss.

2.2.2, getValuesMethod-Methode

// Methode zum Abrufen von Werten. Verwenden Sie getValuesMethod() für alle Validierer, die eine gemeinsame Validierung mehrerer Felder erfordern {
    gib dieses Formular zurück;
  },

Die Methode getValuesMethod gibt das Formulardatenobjekt in Daten zurück. Dies ist eine sehr scharfe Operation, die der Bereitstellung einer globalen Datensonde entspricht. Auf das Formulardatenobjekt der Daten kann im Validator zugegriffen werden, und aufgrund des v-modalen Modells des Formulars ist die Echtzeitnatur der Daten sichergestellt, d. h. Sie müssen sich keine Sorgen machen, dass Sie die neuesten Werte anderer Attribute nicht abrufen können. Die Methode getValuesMethod bietet eine alternative Idee für die Datenbindung.

2.2.3. comparePasswdValidator

  // Zwei Passwörter vergleichen um zu sehen ob sie gleich sind const comparePasswdValidator = (rule, value, callback) => {
    // Methode zum Abrufen von Werten abrufen var getvaluesMethod = rule.getValuesMethod;
    //Rufen Sie die Methode getvaluesMethod auf, um den Objektwert abzurufen. var formData = getvaluesMethod();
    
    // Eines ist leer, möglicherweise wurde kein Wert eingegeben, kein Vergleich zu diesem Zeitpunkt if (formData.newPasswd == '' || formData.confirmPasswd == ''){
      Rückruf zurückgeben();
    }

    //==================================================================
    // Zwei Passwörter vergleichen // Beide haben Werte, vergleichen, wenn (formData.newPasswd == formData.confirmPasswd){
      // Das neue Passwort stimmt mit dem bestätigten Passwort überein // Löschen Sie zuerst die Warnmeldungen zur Überprüfung der beiden Passwörter. Löschen Sie jetzt die inkonsistente Meldung des anderen Passworts this.$refs['form'].clearValidate(['newPasswd','confirmPasswd']);
      Rückruf();
    }anders{
      callback(new Error('Die beiden Passwörter stimmen nicht überein'));
    }
  }

Da das konfigurierte benutzerdefinierte Regelattribut „getValuesMethod“ eine Methode ist, die auf this.getValuesMethod verweist, kann das Attribut als Methode aufgerufen werden:

 // Methode zum Abrufen von Werten abrufen var getvaluesMethod = rule.getValuesMethod;
    //Rufen Sie die Methode getvaluesMethod auf, um den Objektwert abzurufen. var formData = getvaluesMethod();

Das Ergebnis des Aufrufs der Methode „Attribut“ gibt ein Datenobjekt zurück, das auf this.form verweist, sodass Sie nach Belieben auf die Attribute des Objekts zugreifen können.

Wenn vor dem Vergleich der beiden festgestellt wird, dass einer leer ist, wird er zurückgegeben. Denn nachdem das aktuelle Attribut eingegeben wurde, ist es möglich, dass für das Attribut am anderen Ende noch kein Wert eingegeben wurde. Daher sollte zu diesem Zeitpunkt kein Vergleich durchgeführt werden.

// Eines ist leer, möglicherweise wurde kein Wert eingegeben, kein Vergleich zu diesem Zeitpunkt if (formData.newPasswd == '' || formData.confirmPasswd == ''){
      Rückruf zurückgeben();
    }

Zwei Passwortvergleiche:

  //==================================================================
    // Zwei Passwörter vergleichen // Beide haben Werte, vergleichen, wenn (formData.newPasswd == formData.confirmPasswd){
      // Das neue Passwort stimmt mit dem bestätigten Passwort überein // Löschen Sie zuerst die Warnmeldungen zur Überprüfung der beiden Passwörter. Löschen Sie jetzt die inkonsistente Meldung des anderen Passworts this.$refs['form'].clearValidate(['newPasswd','confirmPasswd']);
      Rückruf();
    }anders{
      callback(new Error('Die beiden Passwörter stimmen nicht überein'));
    }

Vergleichen Sie die beiden Passwörter. Wenn die beiden Passwörter gleich sind, wird ein Alarm ausgegeben. Wenn sie übereinstimmen, müssen Sie zuerst die Warnmeldung am anderen Ende löschen, da das andere Ende zu diesem Zeitpunkt möglicherweise die Meldung „Die beiden Passwörter sind inkonsistent“ ausgibt.

// Löschen Sie zuerst die Warnmeldungen zur Überprüfung der beiden Passwörter. Löschen Sie jetzt die inkonsistente Meldung des anderen Passworts this.$refs['form'].clearValidate(['newPasswd','confirmPasswd']);

Die Methode „clearValidate“ ist eine Methode im Elementformat, die Ausnahmeaufforderungen für ein oder mehrere Validierungsregelattribute löscht.

Wird es in diesem Moment zu „versehentlichen Tötungen“ kommen? Das heißt, dass durch den Löschvorgang auch andere abnormale Eingabeaufforderungen am anderen Ende gelöscht werden. Da die beiden Passwörter gleich sind und auch die Überprüfungsregeln für beide gleich sind, wird diese Überprüfungsregel, da sie an letzter Stelle steht, in der Erkennungsreihenfolge als letztes ausgeführt. Das heißt, wenn dieser Prüfer ausgeführt wird, sind bereits andere Prüfungen erfolgreich. Daher wird es zu solchen „versehentlichen Tötungen“ nicht kommen. Der tatsächliche Implementierungseffekt ist derselbe.

Darüber hinaus ist zu beachten, dass der folgende Code nicht als Ersatz für die obige ClearValidate-Aufrufanweisung verwendet werden kann:

  // Peer-Verifizierung durchführen, wenn (rule.field == 'newPasswd')
          {
            // Wenn das aktuelle Attribut newPasswd ist
            dies.$refs['form'].validateField('confirmPasswd');
          }anders{
            dies.$refs['form'].validateField('newPasswd');
          }

Da zu diesem Zeitpunkt eine Überprüfung durchgeführt wird, führt ein erneuter Aufruf der Peer-Überprüfung dazu, dass der Peer comparePasswdValidator aufruft. Das Ergebnis der Peer-Überprüfung zeigt, dass die beiden Kennwörter konsistent sind. Daher wird der Peer (der Peer des Peers, d. h. er selbst) zur Überprüfung erneut aufgerufen, wodurch eine Endlosschleife entsteht und der Aufrufstapel überläuft. Versuchen Sie daher, im Validatorcode die Methode validateField nicht erneut aufzurufen.

2.3 Verifizierungsergebnisse

Hier sind einige Renderings:

Ausgangszustand:

Ändern Sie das Bestätigungskennwort und verlassen Sie den Eingabefokus:

Öffnen Sie das Eingabefeld für das neue Passwort und verlassen Sie den Eingabefokus, ohne Informationen einzugeben:

Ändern Sie das Bestätigungskennwort, löschen Sie das letzte Zeichen „8“, verlassen Sie den Eingabefokus und es wird in den Ausgangszustand zurückgekehrt.

Dies ist das Ende dieses Artikels über ein typisches Beispiel für die gemeinsame Überprüfung von zwei Feldern in Vue – das Ändern des Passworts. Weitere relevante Inhalte zur Änderung von Vue-Passwörtern finden Sie in den vorherigen Artikeln von 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:
  • Vue implementiert Funktionen zum Anzeigen persönlicher Informationen und Ändern von Passwörtern
  • Beispiel für die Validierung von Vue-Elementen
  • Vue-CLI3-Lösung zum Abbrechen der Eslint-Codeüberprüfung
  • Häufig verwendete Validierungsregeln in Vue (Beispielcode)
  • Implementierung der allgemeinen Anweisungsüberprüfung für Vue-Eingabe-Tags
  • Vue implementiert Beispielcode zur Überprüfung von Mobiltelefonnummern (Anwendungsszenario der Anti-Shake-Funktion)

<<:  Implementierung der Docker-Bereitstellung von ElasticSearch und ElasticSearch-Head

>>:  Tutorial zum Herunterladen und Installieren der komprimierten Version von MySQL 8.0.16 unter dem Win10-System

Artikel empfehlen

So starten/stoppen Sie den Tomcat-Server in Java

1. Projektstruktur 2. Rufen Sie Tomcat.java auf P...

CentOS6.8 verwendet cmake zur Installation von MySQL5.7.18

Unter Bezugnahme auf die Online-Informationen hab...

Beispiel für asynchronen Dateiupload in HTML

Code kopieren Der Code lautet wie folgt: <form...

Tiefgreifendes Verständnis von globalen Sperren und Tabellensperren in MySQL

Vorwort Je nach Umfang der Sperrung können Sperre...

Die letzten zwei Jahre mit User Experience

<br />Es ist nicht länger als zwei Jahre her...

Beispielcode zur Umsetzung des „Pluszeichen“-Effektes mit CSS

So erzielen Sie den unten gezeigten Pluszeichen-E...

Detaillierte Erklärung des Rewrite-Moduls von Nginx

Das Umschreibmodul ist das Modul ngx_http_rewrite...