vue+springbootでログイン機能を実現

vue+springbootでログイン機能を実現

この記事の例では、ログイン機能を実現するためのvue+springbootの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

1. ログイン機能の実装

フォームを送信するためのコードは次のとおりです。

非同期送信フォーム(ユーザー) {
        this.$refs[user].validate((valid) => {
               if(有効){
                        アラート("ユーザー");
                        this.$axios.post("http:localhost:8087/user/login?code="+this.code,user).then(res => {
                            アラート("成功")
                             if(res.data.state){
                                 alert(res.data.msg+"ログインに成功しました。ホームページに移動します......");
                             }
                             それ以外{
                                 アラート(res.data.msg);
                             }
                        });
                    }
                    それ以外{
                        false を返します。
           }
   });
},

頭を打ったので頭がぶんぶんとしました。

このことは数日間話題になり、最終的には私が比較的愚かなコードを使用して実装しました。具体的なアイデアは次のとおりです。

まず、バックグラウンドで現在の検証コード画像の実際の検証コードを取得し、フロントエンドに渡します。

(有効)の場合{
        コンソールにログ出力します。
         this.$axios.get("http://localhost:8087/user/getCode").then(res => {
                  tcode = res.data.toLowerCase() とします。
                  (tcode == this.code)の場合{
                                確認します(this.user);
                            } それ以外 {
                                alert('認証コードエラー!');
                            }
                        });
                    }

真ん中の verify は、ログインするユーザーのユーザー名とパスワードを検証する場所です。検証コードは、最初に 4 桁の検証コードを生成し、次にそれを base64 形式の文字列に変換し、最後にフロントエンドに渡し、バックエンドは文字列コードを返します。

@GetMapping("/getCode")
    @ApiOperation(value="検証コードを取得", notes="バックエンドから検証コードを取得してフロントエンドに送信")
    パブリック文字列 getCode(HttpServletRequest リクエスト){
        文字列キー = (String)request.getServletContext().getAttribute("code");
        log.info("キー:[{}]",キー);
        リターンキー;
    }

ログインモジュールのフロントエンドがバックエンドに値を渡せない原因は、フロントエンドにユーザー名とパスワードしかなかったためだと分析したところ、ユーザー名とパスワードだけのフォームでもオブジェクトを形成できると勘違いし、フォームを強制的にオブジェクトに変換してバックエンドに渡してしまうという無限ループが発生し、長い間この問題に悩まされていました。以前は、ユーザー名、パスワード、確認コードはバックエンドに渡され、そこで保持されていました。まず、バックエンドから検証コードを取得し、フロントエンドで比較して正しいかどうかを確認します。次に、ユーザーが入力したユーザー名とパスワードをバックエンドに渡して、対応するユーザー名を持つユーザーをデータベースで検索します。ユーザーが見つかった場合は、ユーザーが存在することを意味し、そうでない場合はユーザーが存在します。次に、ユーザーが入力したパスワードがデータベースに保存されているパスワードと一致しているかどうかを比較します。一致している場合は true が返され、ログインは成功します。一致していない場合は失敗します。具体的な実装コードは次のとおりです。

//ユーザーコントローラー
 @PostMapping("/ログイン")
    @ApiOperation(value = "システムにログイン", notes = "従​​業員管理システムにログイン")
    パブリック Map<String,Object> login(@RequestParam String Name,@RequestParam String Pwd){
        System.out.println(名前+" "+パスワード);
        Map<String,Object> map = new HashMap<>();
        試す{
            ユーザー userdb = userService.login(Name,Pwd);
            map.put("状態",true);
            map.put("msg","ログインに成功しました");
            map.put("ユーザー",userdb);
        }例外eをキャッチする{
            e.printStackTrace();
            map.put("状態",false);
            map.put("msg",e.getMessage());
        }
        ログ情報("[{}]",map.toString());
        マップを返します。
    }
//ユーザーサービスの実装
 @オーバーライド
    パブリックユーザーログイン(文字列名、文字列パスワード) {
        ユーザー userDB = userMapper.selectByName(Name);
        if(!ObjectUtils.isEmpty(userDB)){
            (userDB.getPwd().equals(Pwd)) の場合 {
                userDB を返します。
            }
            それ以外{
                新しい RuntimeException("パスワードが正しくありません");
            }
        }
        それ以外{
            新しい RuntimeException("ユーザーが存在しません") をスローします。
        }
    }
// ユーザーマッパー.java
ユーザー selectByName(文字列名);
<!--UserMapper.xml-->
 <select id="selectByName" パラメータタイプ="文字列" 結果タイプ="com.sunset.system.entity.User">
        ID、名前、年齢、性別、パスワード、部門、給与を選択してください
        名前が #{name} であるユーザーから
</選択>

コーディング中に、Name = "#{name}" がデータベース検索でエラーを引き起こすという小さなエピソードに遭遇しました。この記事を読んだ人がこの落とし穴を回避できることを願っています。
このようにしてバックエンドロジックが実装され、フロントエンドロジックは次のようになります。

非同期関数 verify(userinfo) {
      const {data: res} = verifyUser(userinfo);
      コンソールログ(res);
          res.state == trueの場合{
               _this.$メッセージ({
                 タイトル: 「検証に成功しました」
                 メッセージ: 「従業員管理システムへようこそ」
                  タイプ: 「成功」
            });
      window.location.href = "http://www.baidu.com";
      //_this.$router.push("http://www.baidu.com"); を待機します。
       } それ以外 {
           _this.$メッセージ({
            タイトル: 「検証に失敗しました」
         メッセージ: res.msg、
          タイプ: 「エラー」
       })
       false を返します。
     }
}

ここではaxios postリクエストを使用します。具体的なパスはprojectName.src.apiで、新しいuser.jsファイルを作成します。

エクスポートconst verifyUser = (ユーザー) => {
    リクエストを返す({
        URL: "/user/ログイン",
        メソッド: 'post'、
        パラメータ: {
            名前: user.Name、
            パスワード: user.Pwd
        }
    })
}

さらに、request.jsを設定する必要があります。ファイルパスはprojectName.src.utilsです。

'axios' から axios をインポートします

定数インスタンス = axios.create({
  baseURL: 'http://localhost:8080', //バックエンド プロジェクトのポート timeout: 10000,
  ヘッダー: {'X-Custom-Header': 'foobar'}
});

デフォルトインスタンスをエクスポートします。

他に論理的な質問がある場合は、ぜひ議論してください。

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

以下もご興味があるかもしれません:
  • Springboot+VUEフロントエンドとバックエンドの分離による防疫プラットフォームJAVAの実現
  • Springboot+vueで検証コード機能を実現
  • Vue+SpringBoot のフロントエンドとバックエンドの分離におけるクロスドメインの問題
  • SpringBoot+VUEはデータテーブルプラクティスを実装します
  • springboot+vue をベースにゴミ分類管理システムを実現
  • SpringBoot+MyBatisPlus+Vue フロントエンドとバックエンド分離プロジェクトのクイック構築プロセス(フロントエンド編)
  • SpringBoot+MyBatisPlus+Vue フロントエンドとバックエンド分離プロジェクトクイック構築プロセス(バックエンド)
  • Springboot+vueプロダクションバックグラウンド管理システムプロジェクト

<<:  MySQLクエリステートメントの簡単な操作例

>>:  mysql コマンドライン スクリプトの実行例

推薦する

背景画像にテキストを表示するためのCSS

効果: <div class="imgs"> <!-- 背景画...

iframeフレームはIEブラウザで白い背景を透明に設定します

最近、プロジェクトを進める過程で、ページの階層構造を描画するために iframe を頻繁に使用する必...

Docker Compose を使用して nginx のロード バランシングを実装する方法

Dockerネットワーク管理とコンテナIP設定に基づいてNginxロードバランシングを実装するすべて...

スタイルを書く際の背景色宣言の重要性

タイトルの通り、ページを修正すると以下のような状況が発生する可能性があります。現在、古いページを改修...

Linux 環境の Apache で https サービスを有効にする方法の詳細な説明

この記事では、Linux 環境の Apache で https サービスを有効にする方法について説明...

CSS で overflow-y: visible; が機能しない理由の分析と解決

シナリオ最近の要件は、モバイル デバイス用の h5 ページです。これには、選択可能なカードの行が必要...

Centos7 システムに k8s クラスターを展開するための詳細な紹介

目次1 バージョンと計画1.1 バージョン情報: 1.2 クラスター計画2. 展開1. ファイアウォ...

PSSHを使用してLinuxサーバーを一括管理する

pssh は、多数のマシンでのバッチ ssh 操作に使用される、Python で実装されたオープン ...

MYSQL 5.6 スレーブレプリケーションの展開と監視

MYSQL 5.6 スレーブレプリケーションの展開と監視MYSQL 5.6 のインストールと展開 #...

VUE のコンパイル スコープとスロット スコープのスロットの問題について

スロットとは何ですか?スロット ディレクティブは v-slot であり、現在 slot と slot...

Linux QT Kit が見つからない、バージョンが空の問題の解決策

現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...

MySQLクエリ文を書き換える3つの戦略

目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...

js を使ってシンプルな虫眼鏡効果を実現

この記事の例では、参考までに簡単な虫眼鏡効果を実現するためのjsの具体的なコードを共有しています。具...

@media レスポンシブ CSS を使用してさまざまな画面に適応する例

定義と使用@media クエリを使用すると、さまざまなメディア タイプに異なるスタイルを定義できます...

Alibaba Cloudのセキュリティルール設定の詳細な説明

2日前、ダブル11ショッピングフェスティバルを利用して、Alibaba CloudでECS(サーバー...