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で個人ブログを構築するプロセス全体の詳細な説明

推薦する

Nginx のアクセス制御とパラメータ調整方法

Nginx グローバル変数Nginx には、$variable 名を通じて使用できるグローバル変数が...

uniapp プロジェクトをデスクトップ アプリケーションとしてパッケージ化する方法

Electronのインストール cnpm 電子をインストール -g electron-package...

CSS3 フレックスレイアウトを使用して要素を均等に分散するサンプルコード

この記事では主に、CSS3 フレックスレイアウトを使用して要素を均等に配置する方法を紹介します。自分...

RedHat 6.5 に MySQL 5.7 をインストールするための詳細なチュートリアル

RedHat6.5インストールMySQL5.7チュートリアル共有、参考までに、具体的な内容は次のとお...

MySQLの読み書き分離により挿入後にデータが選択されなくなる問題を解決

MySQLは独立した書き込み分離を設定します。コードに次のものを書くと問題が発生する可能性があります...

Taobao ストアでズームインする効果は、スライドショーを使用する原理に似ています。

今日は、スライドを使用する原理に似た、Taobao のフロントエンドのマウス ズーム効果に慣れました...

CentOS 7 環境でソースコードから MySQL 5.7 をインストールする方法

この記事では、CentOS 7 環境でソース コードから MySQL 5.7 をインストールする方法...

Linux でマウントされたファイルシステムの種類を表示する方法

序文ご存知のとおり、Linux は ext4、ext3、ext2、sysfs、securityfs、...

DIV の一般的なタスク (パート 1) — 一般的なタスク (スクロール バーの表示、div の非表示、イベント バブリングの無効化など)

最も一般的に使用されるレイアウト要素として、DIV は Web 開発において重要な役割を果たします。...

Ubuntuのpython3でvenvを使用して仮想環境を作成する

1. 仮想環境はプロジェクトに従い、単一のプロジェクト用の仮想環境を作成します(Python 3.4...

Nginxポーリングアルゴリズムの基本的な実装方法の詳細な説明

ポーリングアルゴリズムの紹介多くの人が職場で nginx を使用しており、その設定に精通しています。...

MySQL MHA の高可用性構成とフェイルオーバーの詳細な導入手順

目次1. MHAの紹介1. MHAとは何ですか? 2. MHAの構成3. MHAの特徴2. MySQ...

読み取り専用と無効の違い

要約すると: Readonly は入力 (テキスト/パスワード) とテキスト領域に対してのみ有効です...

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...

MySQL テーブル全体の暗号化ソリューション keyring_file の詳細な説明

例示するMySql Community Edition は、5.7.11 以降、テーブルベースのデー...