Vue はグラフィック検証コードログインを実装します

Vue はグラフィック検証コードログインを実装します

この記事では、グラフィック認証コードログインを実装するためのVueの具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

1. レンダリング

2. components の下に、次の内容の新しいファイル identify.vue を作成します。

<テンプレート>
  <div class="s-canvas">
    <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  名前: 'SIdentify',
  小道具: {
    識別コード:
      タイプ: 文字列、
      デフォルト: '1234'
    },
    フォントサイズ最小: {
      タイプ: 数値、
      デフォルト: 28
    },
    フォントサイズ最大: {
      タイプ: 数値、
      デフォルト: 40
    },
    背景色最小: {
      タイプ: 数値、
      デフォルト: 180
    },
    背景色最大: {
      タイプ: 数値、
      デフォルト: 240
    },
    色最小:
      タイプ: 数値、
      デフォルト: 50
    },
    色最大値: {
      タイプ: 数値、
      デフォルト: 160
    },
    ラインカラー最小: {
      タイプ: 数値、
      デフォルト: 40
    },
    ラインカラー最大: {
      タイプ: 数値、
      デフォルト: 180
    },
    ドットカラー最小: {
      タイプ: 数値、
      デフォルト: 0
    },
    ドットカラーマックス: {
      タイプ: 数値、
      デフォルト: 255
    },
    コンテンツ幅: {
      タイプ: 数値、
      デフォルト: 112
    },
    コンテンツの高さ: {
      タイプ: 数値、
      デフォルト: 40
    }
  },
  メソッド: {
    // 乱数を生成する randomNum (min, max) {
      Math.floor(Math.random() * (max - min) + min) を返します。
    },
    // ランダムな色を生成する randomColor (min, max) {
      var r = this.randomNum(最小値, 最大値)
      var g = this.randomNum(最小値, 最大値)
      var b = this.randomNum(最小値, 最大値)
      'rgb(' + r + ',' + g + ',' + b + ')' を返します
    },
    描画画像() {
      var キャンバス = document.getElementById('s-canvas')
      var ctx = キャンバス.getContext('2d')
      ctx.textBaseline = '下'
      // 背景を描画する ctx.fillStyle = this.randomColor(
        this.backgroundColorMin、
        this.backgroundColorMax
      )
      ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)
      // テキストを描画する for (let i = 0; i < this.identifyCode.length; i++) {
        this.drawText(ctx, this.identifyCode[i], i)
      }
      this.drawLine(ctx)
      this.drawDot(ctx)
    },
    描画テキスト (ctx, txt, i) {
      ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)
      ctx.フォント =
        this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'
      var x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))
      var y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)
      var deg = this.randomNum(-30, 30)
      // 座標原点と回転角度を変更する ctx.translate(x, y)
      ctx.rotate(度 * Math.PI / 270) です。
      ctx.fillText(txt, 0, 0)
      // 座標原点と回転角度を復元します ctx.rotate(-deg * Math.PI / 270)
      ctx.translate(-x, -y)
    },
    描画線 (ctx) {
      // 干渉線を描く for (let i = 0; i < 2; i++) {
        ctx.strokeStyle = this.randomColor(
          this.lineColorMin、
          this.lineColorMax
        )
        ctx.beginPath()
        ctx.moveTo() 関数は、
          this.randomNum(0, this.contentWidth)、
          this.randomNum(0, this.contentHeight)
        )
        ctx.lineTo() 関数は、
          this.randomNum(0, this.contentWidth)、
          this.randomNum(0, this.contentHeight)
        )
        ctx.ストローク()
      }
    },
    描画ドット (ctx) {
      // 干渉点を描画する for (let i = 0; i < 20; i++) {
        ctx.fillStyle = this.randomColor(0, 255)
        ctx.beginPath()
        ctx.arc(
          this.randomNum(0, this.contentWidth)、
          this.randomNum(0, this.contentHeight)、
          1、
          0,
          2 * 数学.PI
        )
        ctx.fill()
      }
    }
  },
  時計:
    識別コード(){
      この.drawPic()
    }
  },
  マウントされた(){
    この.drawPic()
  }
}
</スクリプト>
<style lang='scss' スコープ>
.s-キャンバス{
    高さ: 38px;
}
.s-canvas キャンバス{
    上マージン: 1px;
    左マージン: 8px;
}
</スタイル>

3. ページの紹介

<スクリプト>
 '../../components/identify' から SIdentify をインポートします。
 エクスポートデフォルト{
    コンポーネント: { SIdentify }
  }
  データ() {
    // 検証コードカスタム検証ルール const validVerifycode = (rule, value, callback) => {
      定数 newVal = value.toLowerCase()
      const identifyStr = this.identifyCode.toLowerCase()
      (newVal === '')の場合{
        callback(new Error('認証コードを入力してください'))
      } そうでない場合 (newVal !== identifyStr) {
        console.log('validateVerifycode:', 値)
        callback(new Error('認証コードが正しくありません!'))
      } それ以外 {
        折り返し電話()
      }
    }
    戻る {
      識別コード: '3456789ABCDEFGHGKMNPQRSTUVWXY'、
      識別コード: ''、
       ルールフォーム: {
        ユーザー名: ''、
        パスワード: ''、
        検証コード: ''
      },
      ルール:
        確認コード:
          { 必須: true、トリガー: 'blur'、バリデータ: validVerifycode }
        ]
      }
 }
    }
</スクリプト>

4.html

<el-form-item prop="検証コード">
 <div style="display:flex">
 <el-入力
 v-model="ruleForm.verifycode"
 placeholder="確認コードを入力してください"
 @keyup.enter.native="ログイン('ruleForm')"
 </el-input> ...
 <span @click="リフレッシュコード"
 ><s-identify :identifyCode="identifyCode"></s-identify
 </span>
 </div>
</el-form-item>

5. マウント

マウント() {
    //検証コードの初期化 this.identifyCode = ''
    this.makeCode(this.identifyCodes, 4)
  }

6. 方法

メソッド: {
    // 乱数を生成する randomNum(min, max) {
      Math.floor(Math.random() * (max - min) + min) を返します。
    },
    // 検証コードを切り替える refreshCode() {
      this.identifyCode = ''
      this.makeCode(this.identifyCodes, 4)
    },
    // 4桁のランダムな検証コードを生成する makeCode(o, l) {
      (i = 0; i < l; i++ とします) {
        this.identifyCode += this.identifyCodes[
          this.randomNum(0, this.identifyCodes.length)
        ]
      }
    }
 }

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 検証コードログインメソッドのVue実装例
  • Vue は携帯電話の認証コードによるログインを実装します
  • vueを使用して登録ページの効果を実現し、vueを使用してSMS認証コードログインを実現します
  • Vue は携帯電話番号と確認コードによるログインを実装します (60 秒のカウントダウンは無効)
  • Vue は SMS 認証コードログイン機能を実装します (プロセスの詳細説明)
  • Vue は、携帯電話番号経由で SMS 認証コードログインを送信するためのサンプル コードを実装します。

<<:  画像の盗難を防ぐために Nginx で Referer を設定する方法

>>:  nginx+WordPressで個人ブログを構築するプロセス全体の詳細な説明

推薦する

CentOS7 に Redis をインストールして設定する方法

導入Redis を詳しく説明する必要はありません。インストールと設定を始めましょう。インストールソー...

VUE ユニアプリコア知識の簡単な紹介

目次仕様a. ページファイルはVueの単一ファイルコンポーネント仕様に準拠しています。 b. コンポ...

ウェブインターフェースデザインでウェブサイトのスタイルガイドを作成する方法(画像とテキスト付き)

スタイル ガイドとは何でしょうか? 簡単に言えば、ストーリーを伝える方法を説明するドキュメントです。...

Docker Swarmの概念と使用法の詳細な説明

Docker Swarm は、Docker によって開発されたコンテナ クラスター管理サービスです。...

JavaScript における Arguments オブジェクトの使用に関する詳細な説明

目次序文議論の基本概念議論の役割実パラメータと仮パラメータの数を取得する実際のパラメータ値を変更する...

MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)

開発の背景:最近、私はバッチ データを MySQL データベースにインポートする機能に取り組んでいま...

史上最も便利な Zookeeper サーバーの構築方法 (推奨)

ZooKeeperとはZooKeeper は、分散アプリケーションに効率的で可用性の高い分散調整サ...

MySQL 8.0.23 インストールの超詳細なチュートリアル

目次序文1. 公式サイトからMySQLをダウンロードする2. 解凍ファイルを設定する3. 初期化4....

Vite+ElectronでVUE3デスクトップアプリケーションを素早く構築

目次1. はじめに2. Viteプロジェクトを作成する1. viteをインストールする2. プロジェ...

HTMLページのヘッダーコードは完全に明確です

以下のコードはすべて <head>...</head> の間にあり、具体的な...

JavaScript のマイクロタスクとマクロタスクの説明

序文: js はシングルスレッド言語なので、非同期にすることは不可能です。しかし、js のホスト環境...

Vue.js の計算プロパティ、監視プロパティ、ライフサイクルの詳細な説明

目次序文計算されたプロパティ計算プロパティの紹介入門ケース統計価格事例ゲッターメソッドとセッターメソ...

Linux exa コマンド (ls よりも優れたファイル表示エクスペリエンス)

インストールREADMEに従ってインストールしてくださいドキュメントには、exa は Rust で実...

Ubuntu20のtzselect設定時間失敗問題、Raspberry Piサーバ(推奨)

2 日前、Raspberry Pi サーバーを Ubuntu 20 にアップグレードしました。今日...

MySql バージョンの問題に対する完璧なソリューション sql_mode=only_full_group_by

1. sql_modeを確認する @@sql_mode を選択照会された値は次のとおりです。 ON...