この記事の例では、ログイン機能を実現するための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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
序文lvm (論理ボリューム マネージャー) 論理ボリューム管理は、Linux システムのニーズを満...
この記事では、Webページの画像の回転を実現するためのjsの具体的なコードを参考までに共有します。具...
序文通常のユーザーはcrontabスケジュールタスクを定義します。たとえば、Oracleユーザーはス...
成果を達成する 実装コードhtml <div class="wrapper"...
1 セミコロン「;」のない CSS スタイル2 タグが閉じられておらず、「>」がありません...
最近、Xiao Ming は新しい Mac を購入し、独自のブログ Web サイトを構築したいと考え...
システムとユーザー環境の設計<br />Apple システムの成功は、そのシステム アー...
Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...
AOP の紹介AOP (アスペクト指向プログラミング) の主な機能は、コアビジネスロジックモジュール...
<br />前回は、Web テーブルにセルの線を設定する方法を学びました。今日は、Web...
目次序文関数のオーバーロードマッピングタイプ部分的、読み取り専用、Null 可能、必須選択、記録除外...
目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...
この記事では、参考までに、Navicat for MySql の CSV ファイルのビジュアルインポ...
1. 改行を強制せず、省略記号で終了します。コードをコピーコードは次のとおりです。 <div ...
目次出力出力パス出力.publicPath webpack-dev-server の publicP...