この記事の例では、ログイン機能を実現するための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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
以前、Amap API を非同期にロードする方法を紹介しました。今回は、vue-amap の使用方法...
:= と = の違い=設定および更新の場合にのみ、:= と同じ効果、つまり代入効果があり、それ以外の...
方法1: 送信ボタンから送信する <!DOCTYPE html> <html>...
Linux に MySQL をインストールするには、yum インストールとソース コード コンパイ...
<br />それぞれのトピックについて、チーム内でメールで議論します。議論が白熱するにつ...
目次背景関数目的アイデアの源成し遂げるセット得るプロパティの削除拡張機能を禁止するもっている要約する...
目次1. はじめに: 2. プロトタイプチェーン継承: 3. コンストラクタ継承の借用(オブジェクト...
目次1.kvmの展開1.1 kvmのインストール1.2 kvm Web管理インターフェースのインスト...
HTML にはデータ属性が含まれていることがよくあります。これらは HTML5 のカスタム属性です。...
この記事では、ログインスライダー検証を実装するためのJavaScriptの具体的なコードを参考までに...
目次iframeの外側のiframeのコンテンツを取得する方法1方法2 iframe 内の ifra...
Fabric.js は非常に便利なキャンバス操作プラグインです。ここでは、日常のプロジェクトで使用さ...
Vueでは、ローカルコンポーネントを自分で定義(登録)することができます。コンポーネント名を定義する...
目次ファーストルックインデックスインデックスの概念インデックスファイルの構成インデックスの役割SQL...
[LeetCode] 183.注文しない顧客Web サイトに、Customers テーブルと Or...