Vue implementiert die Anmeldung per Mobiltelefon-Bestätigungscode

Vue implementiert die Anmeldung per Mobiltelefon-Bestätigungscode

In diesem Artikel wird der spezifische Code von Vue zur Implementierung der Anmeldung per Handy-Verifizierungscode zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

Bestätigungscode

<Vorlage>
  <div>
    <el-main>
      <el-form :model="ruleForm" :rules="Regeln" ref="ruleForm" label-width="100px" class="demo-ruleForm">
        <el-form-item label="Mobiltelefonnummer" prop="Telefon">
          <el-input v-model="ruleForm.phone" placeholder="Bitte geben Sie Ihre Telefonnummer ein" size=""
                    maxlength="11"></el-input>
        </el-form-item>

        <el-form-item label="Bestätigungscode" prop="code">
          <el-Zeile :span="24">
            <el-col :span="12">
              <el-input v-model="ruleForm.code" auto-complete="off" placeholder="Bitte geben Sie den Bestätigungscode ein" size=""
                        maximale Länge = "4"
                        @keyup.enter.native="submitForm('ruleForm')"></el-input>
            </el-col>
            <el-col :span="12">
              <div Klasse="Anmeldecode">
                <!--Bestätigungscode-Komponente-->
                <el-button @click="getCode()" :class="{'disabled-style':getCodeBtnDisable}"
                           :deaktiviert="getCodeBtnDisable">{{ codeBtnWord }}
                </el-button>
              </div>
            </el-col>
          </el-row>
        </el-form-item>

        <!--Gleitende Überprüfungskomponente-->
        <Überprüfen></Überprüfen>

        <el-form-item>
          <el-button type="primary" @click="submitForm('ruleForm')">Anmelden</el-button>
        </el-form-item>
      </el-form>

    </el-main>
  </div>
</Vorlage>

Verwendete Vue-Verifizierungstool-Klasse

Standard exportieren {
  // Beschränken Sie die Eingabe auf Zahlen (zwei Dezimalstellen können eingegeben werden)
  limitEingabePunktZahl(Wert) {
    wenn (val === 0 || val === "0" || val === "" || val === undefiniert) {
      zurückkehren "";
    } anders {
      lass Wert = null;
      value = val.replace(/[^\d.]/g, ""); // Alle Zeichen außer "number" und "." löschen value = value.replace(/\.{2,}/g, ​​​​"."); // Nur das erste behalten. Alle zusätzlichen Zeichen löschen value = value
        .replace(.", "$#$")
        .replace(/\./g, "")
        .replace("$#$", ".");
      value = value.replace(/^(-)*(\d+)\.(\d\d).*$/, "$1$2.$3"); // Es können nur zwei Dezimalstellen eingegeben werden. Rückgabewert;
    }
  },

  handleRouteToArray(route) {
    const-Übereinstimmungen = route.path.split('/')
    Übereinstimmungen.Shift()
    lass newMatch = []
    Übereinstimmungen.map((item, i) => {
      wenn (entspricht[i - 1]) {
        Element = neuesMatch[i - 1] + '/' + Element
      }
      newMatch.push(Element)
    })
    neuesMatch = neuesMatch.map(item => {
      gibt `/${item}` zurück
    })
    returniere neuesMatch
  },

  // Das Passwort muss mindestens 8 Zeichen lang sein und drei beliebige Großbuchstaben, Kleinbuchstaben, Zahlen und Sonderzeichen enthalten testPassWord: function (str) {
    var rC = {
      lW: '[az]',
      uW: '[AZ]',
      nW: '[0-9]',
      sW: '[\\u0020-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u007E]'
    }
    Funktion Reg (str, rStr) {
      var reg = neuer RegExp(rStr)
      wenn (reg.test(str)) true zurückgibt
      sonst gibt „false“ zurück
    }
    wenn (Zeichenfolgelänge < 8) {
      return false
    } anders {
      var tR = {
        l: Reg(str, rC.lW),
        u: Reg(str, rC.uW),
        n: Reg(str, rC.nW),
        s: Reg(str, rC.sW)
      }
      wenn ((tR.l && tR.u && tR.n) || (tR.l && tR.u && tR.s) || (tR.s && tR.u && tR.n) || (tR.s && tR.l && tR.n)) {
        // document.title = "Das Passwort erfüllt die Anforderungen"
        returniere wahr
      } anders {
        return false
      }
    }
  },

  // Passwortüberprüfung 8-30 Zeichen pwdReg: /^([0-9a-zA-Z]|(?:&)|(?:~)|(?:!)|(?:@)|(?:#)|(?:\$)|(?:%)|(?:\^)|(?:\*)){8,30}$/,

  // Telefonnummernverifizierung phoneReg: /^1[3|4|5|6|7|8][0-9]{9}$/,

  // Geld formatieren formatUSD (val, currency) {
    wenn (val === '' || val === '--' || val === undefiniert) {
      zurückkehren '--'
    }
    // Zuerst feststellen, ob die Daten einen Dezimalpunkt haben let newVal = String(Number(val).toFixed(2))
    // Konvertiere wissenschaftliche Notation in normale String-Anzeige if (newVal.includes('e+')) {
      neuerWert = Zahl(neuerWert).toLocaleString()
      neuerWert = this.unFormatAmount(neuerWert)
    }
    let dotIdx = newVal.lastIndexOf('.')
    let dotVal = '.00' // Behalte die Daten nach dem Dezimalpunkt if (dotIdx >= 0) {
      dotVal = neuerVal.substr(dotIdx, neuerVal.Länge)
      neuerWert = neuerWert.slice(0, dotIdx)
    }

    lass len = newVal.length
    lass arr = []
    let lastIndex = null
    während (Länge > 0) {
      letzterIndex = Länge
      Länge -= 3
      arr.unshift(neuerWert.substring(Länge, letzterIndex))
    }
    Wert = arr.join(',')

    if (Währung) {
      neuerWert = `${currency} ${val}${dotVal}`
    } anders {
      // neuerWert = `$ ${val}${dotVal}`
      newVal = `¥ ${val}${dotVal}` // Standard ist RMB}
    returniere neuenWert
  },

  // Formatieren Sie den Betrag ohne Dezimalstellen, Betragssymbole usw. Geben Sie eine Ganzzahl ein formatAmount (val) {
    wenn (val === '' || val === '--' || val === undefiniert) {
      zurückkehren '--'
    }
    wenn (Wert === 0 || Wert === '0') {
      Rückgabe 0
    }
    // Zuerst feststellen, ob die Daten einen Dezimalpunkt haben let newVal = String(val)
    let dotIdx = newVal.lastIndexOf('.')
    let dotLength = 0
    wenn (newVal.split('.').Länge > 1) {
      Punktlänge = newVal.split('.')[1].Länge
    }
    let dotVal = '' // Behalte die Daten nach dem Komma if (dotIdx >= 0) {
      neuerWert = String(Zahl(Wert).toFixed(5))
      dotVal = newVal.substr(dotIdx, dotLength + 1)
      neuerWert = neuerWert.slice(0, dotIdx)
    }
    lass len = newVal.length
    lass arr = []
    let lastIndex = null
    während (Länge > 0) {
      letzterIndex = Länge
      Länge -= 3
      arr.unshift(neuerWert.substring(Länge, letzterIndex))
    }
    Wert = arr.join(',')
    wenn (dotVal.length < 2) {
      dotVal = ''
    }
    Rückgabewert + Punktwert
  },

  // Bestimmen, ob die Daten leer sind isEmptyVal (val) {
    wenn (val === undefiniert || val === '') {
      zurückkehren '--'
    } anders {
      Rückgabewert
    }
  },

    // Formatieren Sie Jahr, Monat, Tag vom Typ: Chinesischer Anzeigemodus (ch) und Spleißmodus // Hinweis: Der chinesische Anzeigemodus wird nur benötigt, wenn Parameter über die Schnittstelle übergeben werden, andernfalls ist es das amerikanische Format YMD (jetzt Typ = "ch") {
    wenn (!jetzt || jetzt === 'null' || jetzt === '--' || jetzt === undefiniert) {
      zurückkehren '--'
    }
    wenn (Nummer(jetzt)) {
      jetzt = neues Datum(jetzt)
    }
    // Kompatibel mit IE-Browser, JJ-MM-TT-Format if (typeof now === 'string' && now.includes('-')) {
      jetzt = dies.NeuesDatum(jetzt)
    }
    wenn (jetzt) ​​{
      lass Jahr = ''
      let Monat = ''
      let Datum = ''
      // Die 8 Bits werden hier verwendet, um ein Format wie 20180423 zurückzugeben, wenn (String(now).length === 8 && String(now).indexOf('-') === -1 && String(now).indexOf('/') === -1) {
        const getNow = String(jetzt)
        gibt `${getNow.substring(4, 6)}/${getNow.substring(6, 8)}/${getNow.substring(0, 4)}` zurück
      } anders {
        jetzt = neues Datum(jetzt)
        jahr = jetzt.getFullYear()
        Monat = jetzt.getMonth() + 1
        Datum = jetzt.getDate()
      }
      wenn (Monat < 10) {
        Monat = `0${month}`
      }
      wenn (Datum < 10) {
        Datum = `0${date}`
      }
      wenn (Typ === 'ch') {
        gibt `${year}-${month}-${date}` zurück
      } sonst wenn (Typ) {
        gibt `${Jahr}${Typ}${Monat}${Typ}${Datum}` zurück
      } anders {
        gibt `${Monat}/${Datum}/${Jahr}` zurück
      }
    } anders {
      zurückkehren ''
    }
  },

  // Zeit formatieren: Jahr, Monat, Tag, Stunde, Minute, Sekunde formatDate (jetzt, Typ) {
    if (!now || jetzt === 'null' || jetzt === '--' || jetzt === undefiniert) {
      zurückkehren '--'
    }
    wenn (jetzt) ​​{
      jetzt = neues Datum(jetzt)
      lass jahr = jetzt.getFullYear()
      lass Monat = jetzt.getMonth() + 1
      let date = jetzt.getDate()
      let Stunde = jetzt.getHours()
      let minute = jetzt.getMinutes()
      lass Sekunde = jetzt.getSeconds()
      wenn (Monat < 10) {
        Monat = `0${month}`
      }
      wenn (Datum < 10) {
        Datum = `0${date}`
      }
      if (Stunde < 10) {
        Stunde = `0${Stunde}`
      }
      if (Minute < 10) {
        Minute = `0${Minute}`
      }
      wenn (Sekunde < 10) {
        Sekunde = `0${Sekunde}`
      }
      if (Typ) {
        returniere `${Monat}/${Datum}/${Jahr} ${Stunde}:${Minute}:${Sekunde}`
      } anders {
        gibt `${Monat}-${Datum}-${Jahr}` zurück
      }
    } anders {
      zurückkehren ''
    }
  },
}

Geben Sie einfach die vollständige Version ein, damit sie leichter zu lesen ist.

<Vorlage>
  <div>
    <el-main>
      <el-form :model="ruleForm" :rules="Regeln" ref="ruleForm" label-width="100px" class="demo-ruleForm">
        <el-form-item label="Mobiltelefonnummer" prop="Telefon">
          <el-input v-model="ruleForm.phone" placeholder="Bitte geben Sie Ihre Telefonnummer ein" size=""
                    maxlength="11"></el-input>
        </el-form-item>

        <el-form-item label="Verifizierungscode" prop="code">
          <el-Zeile :span="24">
            <el-col :span="12">
              <el-input v-model="ruleForm.code" auto-complete="off" placeholder="Bitte geben Sie den Bestätigungscode ein" size=""
                        maximale Länge = "4"
                        @keyup.enter.native="submitForm('ruleForm')"></el-input>
            </el-col>
            <el-col :span="12">
              <div Klasse="Anmeldecode">
                <!--Bestätigungscode-Komponente-->
                <el-button @click="getCode()" :class="{'disabled-style':getCodeBtnDisable}"
                           :deaktiviert="getCodeBtnDisable">{{ codeBtnWord }}
                </el-button>
              </div>
            </el-col>
          </el-row>
        </el-form-item>

        <!--Gleitende Überprüfungskomponente-->
        <Überprüfen></Überprüfen>

        <el-form-item>
          <el-button type="primary" @click="submitForm('ruleForm')">Anmelden</el-button>
        </el-form-item>
      </el-form>

    </el-main>
  </div>
</Vorlage>

<Skript>
//Tool-Klasse importieren import Verify from "@/components/Verify";
Ereignis aus „../utils/event“ importieren
importiere common von "@/utils/common";

lass Parameter;
Standard exportieren {
  Name: "LoginIphone",
  Komponenten: {Überprüfen},
  Daten() {
    //Verwenden Sie reguläre Ausdrücke, um die Telefonnummer zu überprüfen const checkPhone = (rule, value, callback) => {
      wenn (!Wert) {
        return callback(new Error('Telefonnummer darf nicht leer sein'));
      } anders {
        //Den regulären Ausdruck der Telefonnummer in der Tool-Klasse abrufen const reg = common.phoneReg
        // konsole.log(reg.test(Wert));
        wenn (reg.test(Wert)) {
          Rückruf();
        } anders {
          //Wenn die Validierungseingabe falsch ist, löschen Sie this.ruleForm.phone = ''
          return callback(new Error('Bitte geben Sie eine gültige Telefonnummer ein'));
        }
      }
    };

    zurückkehren {
      RegelForm: {
        Telefon: '',
        Code: '',
      },

      codeBtnWord: 'Bestätigungscode abrufen', //Text der Schaltfläche „Bestätigungscode abrufen“// waitTime: 61, //Ablaufzeit der Schaltfläche „Bestätigungscode abrufen“ waitTime: 2, //Ablaufzeit der Schaltfläche „Bestätigungscode abrufen“// Überprüfungsregeln: {
        Telefon:
          {Validator: checkPhone, Auslöser: "Unschärfe"}
        ],
        Code: [
          {erforderlich: true, Nachricht: ‚Bitte geben Sie das Bestätigungskennwort ein‘, Auslöser: ‚unscharf‘}
        ]
      }
    };
  },
  //Berechnete Eigenschaften berechnet
  berechnet: {
    // Steuern, ob die Schaltfläche „Bestätigungscode abrufen“ anklickbar ist getCodeBtnDisable: {
      //Taste setzen 61s
      // erhalten() {
      // wenn (this.waitTime === 61) {
      // wenn (diese.regelForm.telefon) {
      // gibt false zurück
      // }
      // gibt true zurück
      // }
      // gibt true zurück
      // }
      erhalten() {
        wenn (diese.waitTime === 2) {
          wenn (diese.regelForm.telefon) {
            return false
          }
          returniere wahr
        }
        returniere wahr
      },
      // Hinweis: Da die berechnete Eigenschaft selbst keine festgelegte Methode hat, unterstützt sie keine Änderungen in der Methode. Ich werde dies weiter unten tun, also muss ich set() manuell hinzufügen {
      }
    },

  }, Methoden: {

    getCode() {
      const _this = dies
      Parameter = {}
      params.phone = diese.regelForm.phone
      // Rufen Sie den SMS-Bestätigungscode auf interface_this.$axios.post('/sendMessage', params).then(res => {
        console.log("--------Überprüfen Sie den Wert der Hintergrundantwort-----", res)
        //Alle Daten speichern const mydata = res.data.data
        console.log("Ich bin in der SMS-Schnittstelle -->", mydata)

        //Bestätigungscode speichern params.yz = mydata.vCode

        console.log("Ich überprüfe den Bestätigungscode-------" + mydata.vCode)
        console.log("Ich überprüfe die Anzahl der Anrufe-------" + mydata.count)

        wenn (res.data.code === 200) {
          diese.$nachricht({
            Nachricht: „Der Bestätigungscode wurde gesendet, bitte warten …“,
            Typ: "Erfolg",
            Mitte: wahr
          })
        }
        wenn (res.data.data.count >= 5) {
          //Rufen Sie die Slider-Verifizierungskomponente event.$emit("VERIFY") auf.
        }

      })

      // Da unten der Timer verwendet wird, müssen Sie diesen Zeiger speichern let that = this
      diese.Wartezeit--
      that.getCodeBtnDisable = true
      this.codeBtnWord = `Erneut abrufen nach ${this.waitTime}s`
      let timer = setzeIntervall(Funktion () {
        wenn (das.Wartezeit > 1) {
          dass.Wartezeit--
          that.codeBtnWord = `Abrufen nach ${that.waitTime}s`
        } anders {
          Intervall löschen(Timer)
          that.codeBtnWord = 'Bestätigungscode abrufen'
          that.getCodeBtnDisable = falsch
          // das.Wartezeit = 61
          das.Wartezeit = 2
        }
      }, 1000)
    },
    Formular absenden(Formularname) {
      const _this = dies
      //Beurteilen Sie, ob der eingegebene Bestätigungscode leer ist, if (this.ruleForm.code != null) {
        dies.$refs[formName].validate((gültig) => {
          if (gültig) {

            _this.$axios.post("/iosLogin", {
              "Telefon": this.ruleForm.phone,
              "Verifizierung": this.ruleForm.code
            }).dann(res => {

              konsole.log(res.daten)
            })


            // console.log("Ich sende:", par)
            //
            // const jwt = par.headers['Autorisierung']
            // console.log("Ich bin Token->", jwt)
            // const userInfo = par.data.data
            // console.log("Benutzerinformationen anzeigen=", userInfo)
            //
            // // Daten teilen // _this.$store.commit("SET_TOKEN", jwt)
            // _this.$store.commit("SET_USERINFO", Benutzerinfo)
            //
            // // Holen // console.log("Ich habe _this.$store.getters.getUser")
            // konsole.log(_this.$store.getters.getUser)

            // _this.$router.push("/blogs")

          } anders {
            console.log('Fehler beim Senden!!');
            gibt false zurück;
          }
        });
      } anders {
        diese.$nachricht({
          showClose: wahr,
          Meldung: „Bitte geben Sie einen Fehler ein“,
          Typ: "Fehler"
        });
      }
    }

  }

}
</Skript>
<Stilbereich>
.el-button.disabled-style {
  Hintergrundfarbe: #EEEEEE;
  Farbe: #CCCCCC;
}

.demo-ruleForm {
  maximale Breite: 500px;
  Rand: 0 automatisch;
}
</Stil>

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Vue-Implementierung eines Beispiels für die Anmeldemethode mit Bestätigungscode
  • Verwenden Sie Vue, um den Effekt der Registrierungsseite zu realisieren. Vue ermöglicht die Anmeldung per SMS-Bestätigungscode.
  • Vue implementiert die Anmeldung mit grafischem Bestätigungscode
  • Vue implementiert die Anmeldung per Mobiltelefonnummer und Bestätigungscode (60-Sekunden-Countdown deaktiviert)
  • Vue implementiert die Anmeldefunktion per SMS-Bestätigungscode (detaillierte Erläuterung des Vorgangs)
  • Vue implementiert Beispielcode zum Senden eines SMS-Bestätigungscode-Logins über eine Mobiltelefonnummer

<<:  Zusammenfassung der Überlegungen zum Schreiben von Web-Frontend-Code

>>:  Der Unterschied zwischen div und span in HTML (Gemeinsamkeiten und Unterschiede)

Artikel empfehlen

Schritte der MySQL-Methode zum Bestimmen, ob es sich um eine Teilmenge handelt

Inhaltsverzeichnis 1. Problem 2. Lösung Option 1:...

Bootstrap 3.0 Studiennotizen CSS-bezogene Ergänzung

Die wesentlichen Inhalte dieses Artikels sind wie...

MySQL 8.0.11 Installations-Tutorial unter Windows

Dieser Artikel zeichnet das Installationstutorial...

CSS-Code zum Erreichen eines Hintergrundverlaufs und automatischen Vollbilds

CSS-Probleme mit dem Hintergrundverlauf und dem a...

So zeichnen Sie eine Schaltfläche in XAML als Kreis neu

Beim Verwenden des XAML-Layouts müssen manchmal ei...

Detaillierte Analyse des temporären JDBC- und MySQL-Tablespace

Hintergrund Temporäre Tablespaces werden verwende...