Vueのログインとログアウトの詳細な説明

Vueのログインとログアウトの詳細な説明

まず、エフェクトの実装プロセスを見てみましょう。

まず、概要とビジネスプロセスおよび関連する技術的なポイントにログインします

  • 記録ページのレイアウト
  • 2つのVue.jsファイルを作成する
  • ログインページと登録ページを作ってみましょう
  • ログインページのレイアウト
  • ルートの設定
  • ログインフォームのデータバインディング
  • ログインフォームの検証ルール
  • ログインフォームのリセット
  • ログイン事前認証
  • ログインコンポーネント構成ポップアッププロンプト
  • ログイン成功後の動作
  • ログイン後にトークンをクライアントのセッションストレージに保存する
  • プログラムによるナビゲーションを通じてバックエンドのホームページにジャンプします。ルーティング アドレスはデフォルトのパス '/' です。
  • ホームページからログアウトすると、コンポーネント構成ポップアップウィンドウが表示され、removeItemを使用してトークンを削除するように求められます。

ログインビジネスプロセス

1. ログインページでユーザー名とパスワードを入力します

2. 検証のためにバックエンドインターフェースを呼び出す

3. 検証後、背景の応答状況に応じてプロジェクトのホームページにジャンプします

ログイン機能の実装

1.まず、ルーティングガードを使用してログインを確認し、ログインする必要があるかどうかを判断します。

{
    パス:'/login',
    名前:"ログイン",
    コンポーネント:ログイン、
    メタ:{
      ログイン:true
    }
} 
  // ログインが必要な場所で meta-true を定義して、ログインが必要かどうかを確認します。if(to.matched.some(item=>item.meta.login)){//ログインが必要です。console.log("ログインが必要です");
    if(isLogin){//1. すでにログインしている場合は、直接渡します if(data.error===400){//バックエンドはログインに失敗したことを伝えます next({name:'login'})
            localStorage.removeItem('トークン');
            戻る;
        }
        if(to.name==='ログイン'){
            次へ({name:'ホーム'})
        }それ以外{
            次()
        }
        戻る;
    }
    if(!isLogin && to.name==='login'){//2. ログインしていないが、ログインページに進む next()
    }
    if(!isLogin && to.name !=='login'){//3. ログインしていない、ログインページではない next({name:"login"})
    }
   }else{//ログインする必要はありません。直接次へ進みます()
   }

2. フォーム検証ルールには、Elementコンポーネントライブラリを使用します。

Elementを使用してテンプレートにスタイルレイアウトを記述します

 <div class="ログインセクション">
    <!-- :rules="ルール" -->
    <el-フォーム
      ラベル位置="上"
      ラベル幅="100px" クラス="demo-ruleForm"
      :rules="ルール"
      :model="ルールから"
      ステータスアイコン
      ref="ルール元"
    >
      <el-form-item label="ユーザー名" prop="名前">
        <!-- v-model を使用してユーザーが入力した名前を取得します -->
        <el-input type="text" v-model="rulesFrom.name"></el-input>
      </el-form-item>
      <el-form-item label="パスワード" prop="パスワード"></el-form-item>
        <!-- v-model を使用してユーザーが入力したパスワードを取得します -->
        <el-input type="password" v-model="rulesFrom.password"></el-input>
      </el-form-item>
      <el-form-item>
        <!-- 送信イベントを定義する -->
        <el-button type="primary" @click="submitFrom('ruleFrom')">送信</el-button>
        <el-button>リセット</el-button>
      </el-form-item>
    </el-form>
  </div>

フォームの検証ルールを定義する

詳細については、Elementの公式ウェブサイトをご覧ください。

データで定義

ルールFrom:{
        名前:''、
        パスワード:''
      },
      ルール:
        名前:[
          // 検証ルール {required:true,message:'ユーザー名を入力してください',trigger:'blur'},
          {min:1,max:5,message:'長さは 1 文字から 5 文字です',trigger:'blur'}
        ]、
        パスワード:[
          {required:true,message:'パスワードを入力してください',trigger:'blur'},
          {min:1,max:5,message:'長さは 1 文字から 5 文字です',trigger:'blur'}
        ]
      }

メソッドで送信イベントを定義する

 // 送信をクリックすると、フォーム内のすべての情報を取得するメソッドがトリガーされます。submitFrom(formName){
      this.$refs[formName].validate( (valid)=>{
        if(有効){
          // 検証に合格すると、ユーザー情報とパスワードがバックエンドに返されます login({
            名前:this.rulesFrom.name、
            パスワード:this.rulesFrom.password,
          }).then((データ)=>{
            コンソールにログ出力します。
            if(データコード===0){
              localStorage.setItem('トークン',data.data.token)
              ウィンドウの場所.href='/';
            }
            if(データコード===1){
              this.$message.error(データ.メッセージ)
            }
          })
        }それ以外{
          console.log('送信エラー!!');
          偽を返す
        }
      })
    }

このとき、ログアウトを書いてルータ内で変換するbeforeEach

const トークン = localStorage.getItem('トークン');
// ! !トークンはブール型に変換されます const isLogin=!!token;
// ルートに入るときは、トークンをバックエンドに返して、それが正当かどうかを確認する必要があります。const data = await userInfo();
    Store.commit('chageUserInfo',data.data)

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue でのログインとログアウトの実装例
  • Vue実戦記録のログインページの実装
  • vue-cli3と要素に基づいたログインページの実装
  • vue+koa2 を使用してセッションとトークンのログインステータス検証を実装する例

<<:  MySQL のユニークインデックスと通常のインデックスのどちらを選択すればよいでしょうか?

>>:  deepin apt コマンドを使用して最新バージョンの docker をインストールする方法

推薦する

ファイルのアップロードの進行状況を示す React の例

目次React アップロードファイル表示の進行状況デモフロントエンドにReactアプリケーションを素...

Dockerがプライベート倉庫Harborを構築する手順

港Harborは、エンタープライズレベルのプライベートDockerイメージリポジトリを構築するための...

MySQLの高可用性アーキテクチャの詳細な説明

目次導入MySQL 高可用性マスター 1 つとバックアップ 1 つ: MySQL マスター スレーブ...

React スキャフォールディングの構築方法を学ぶ

1. フロントエンドエンジニアリングの複雑さいくつかの小さなデモ プログラムを開発するだけであれば、...

JSONオブジェクトのキーを置き換える最良の方法

JSON (JavaScript Object Notation、JS Object Notatio...

Centos7 に yum 経由で MySQL をインストールする方法

1. MySQLがインストールされているかどうかを確認する yum インストール済みリスト | gr...

Linux での中国語入力方法の問題を素早く解決する

背景: 最近、資産報告関連の機能に取り組んでおり、中国語入力をサポートする必要があります。通常のショ...

Ubuntu 16.04 で Python 3 を使用して Django プロジェクトを作成し、実行する方法

ステップ1: Djangoプロジェクトを作成するターミナルを開き、書き込みたいプロジェクトのアドレス...

HTML における水平および垂直の中央揃え方法の詳細な説明 (基礎)

序文馬を書いていたとき、水平方向と垂直方向の中央揃えの方法について、誰もあまり知らなかったと思います...

Ubuntu20.04 VNCのインストールと設定の実装

VNC はリモート デスクトップ プロトコルです。 VNC を使用して Ubuntu 20.04 を...

JavaScriptプロトタイプチェーン図のまとめと実践

目次プロトタイプチェーンプロトタイプチェーンに基づいてシンプルなJQueryライブラリを実装すること...

Ubuntu で起動時に自動的に起動するシェル スクリプトを作成する (推奨)

スクリプトを書く目的は、さまざまなサービスを手動で起動しなくて済むようにすることです(怠惰のためでも...

Ubuntuサーバーの一般的なコマンドの概要

以下のコマンドのほとんどは、コンソール/ターミナル/シェルで入力する必要があります。 'su...

MySQL の完全バックアップとクイックリカバリ方法

過去 15 日間のデータをバックアップするシンプルな MySQL 完全バックアップ スクリプト。バッ...

HTMLテーブルで、各セルに異なる色と幅を設定します

設定が有効にならない場合が多いため、幅や高さなどをテーブル内で直接設定しないことをお勧めします。スタ...