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 をインストールする方法

推薦する

シンプルなドラッグ効果を実現するjs

この記事では、簡単なドラッグ効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...

ウェブページ HTML 特殊記号 HTML 特殊文字比較表

特殊記号名前付きエンティティ10進数エンコード特殊記号名前付きエンティティ10進数エンコードアルファ...

Nginxホットデプロイメントの実装

目次セマフォNginx ホットデプロイメント上記のブログ投稿に従ってください。ファイアウォールをオフ...

Vue ミックスインの使い方の詳しい説明

目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...

Linux で scp コマンドを使用してファイルをリモートでコピーする方法の詳細な説明

序文scp は secure copy の略です。scp は、Linux システムの ssh ログイ...

JSはプログレスバーのスムーズバージョンの詳細な計画を実装します

進捗バーがスムーズではないフロントエンドを学ぶ学生のほとんどは、オーディオプレーヤーやビデオプレーヤ...

フラッシュコンテンツの表示に使用される OBJECT タグと EMBED タグの違いの紹介

1. はじめに:ウェブページにフラッシュ コンテンツを正常に表示したい場合は、ページ上のフラッシュ ...

Linux システム MySQL8.0.19 クイックインストールと構成チュートリアル図

目次1. 環境の紹介2. MySQL-8.0.19をインストールする3. MySQLを設定する1. ...

Dockerコンテナとローカルマシン間でファイルを転送する方法

ホストとコンテナ間でファイルを転送するには、コンテナの完全な ID が必要です。取得方法は以下の通り...

いくつかの CSS3 タグの短縮形 (推奨)

border-radius: CSS3 丸い角構文: border-radius: 25px;楕円...

MySQL の大文字と小文字の区別に関する注意

目次MySQLの大文字と小文字の区別はパラメータによって制御されますMySQLの大文字と小文字の区別...

Linuxターミナルでファイルを作成する2つの一般的な方法を簡単に理解する

mkdir コマンドを使用して新しいディレクトリを作成できることは誰もが知っていますが、多くの場合、...

React NativeのstartReactApplicationメソッドの簡単な分析

今回は、 RNの起動処理を整理しました。最後のstartReactApplication比較的複雑で...

Vue フロントエンド開発における階層的にネストされたコンポーネント間の通信の詳細な説明

目次序文例まとめ序文Vue の親子コンポーネントは、props を通じて親コンポーネントの値を子コン...