この記事の例では、ログイン機能を実現するための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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
効果: <div class="imgs"> <!-- 背景画...
最近、プロジェクトを進める過程で、ページの階層構造を描画するために iframe を頻繁に使用する必...
Dockerネットワーク管理とコンテナIP設定に基づいてNginxロードバランシングを実装するすべて...
タイトルの通り、ページを修正すると以下のような状況が発生する可能性があります。現在、古いページを改修...
この記事では、Linux 環境の Apache で https サービスを有効にする方法について説明...
シナリオ最近の要件は、モバイル デバイス用の h5 ページです。これには、選択可能なカードの行が必要...
目次1 バージョンと計画1.1 バージョン情報: 1.2 クラスター計画2. 展開1. ファイアウォ...
pssh は、多数のマシンでのバッチ ssh 操作に使用される、Python で実装されたオープン ...
MYSQL 5.6 スレーブレプリケーションの展開と監視MYSQL 5.6 のインストールと展開 #...
スロットとは何ですか?スロット ディレクティブは v-slot であり、現在 slot と slot...
現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...
目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...
この記事の例では、参考までに簡単な虫眼鏡効果を実現するためのjsの具体的なコードを共有しています。具...
定義と使用@media クエリを使用すると、さまざまなメディア タイプに異なるスタイルを定義できます...
2日前、ダブル11ショッピングフェスティバルを利用して、Alibaba CloudでECS(サーバー...