0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel5.8でログイン失敗時にセッションにのせてデータを返す

Last updated at Posted at 2020-04-16

例えば、ログインフォームをモーダルで実装していた時とかに、何もしていないとログイン失敗でリダイレクト時にモーダルが隠れている状態になるので return back()->with('login_modal', 'active') でセッションにのせて返す。
blade側で {{ session('login_modal') }}active が取れるのでclassとかにブチ込んでモーダルを表示させたいというやつです。
ログイン失敗時のLaravelの処理がググっても日本語の結果があまり出てこなかったので、誰かのためになれば。。

ログイン機能はみなさんお馴染みの make:authで作っているので、そこで生成されたものを追っていく。
ログイン処理は LoginControllerで処理されているが、 LoginControllerAuthenticatesUsers をUseしているので、それを見にいく。

vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

~~
protected function sendFailedLoginResponse(Request $request)
    {
        throw ValidationException::withMessages([
            $this->username() => [trans('auth.failed')],
        ]);
    }

~~

で処理されているっぽい。
ここでは単純にバリデーションをthrowしているだけ。なのでここをよしなに修正する。
流石に vendor内をいじるのは良くないので、 LoginControllerでオーバーライドする。

LoginController.php
    protected function sendFailedLoginResponse(Request $request)
    {
      // throw ValidationException::withMessages([
      //     $this->username() => [trans('auth.failed')],
      // ]);
      // ↑が元々の記述
      return back()->with('login_modal', 'active')->withErrors([
          $this->username() => [trans('auth.failed')],
      ]);

    }

以上!

モーダルは class="active"で表示状態になるとして、

modal
<div id="modal" class="{{ session('login_modal') }}">
~~ 
</div>

としておくと、 sendFailedLoginResponse()で帰ってきたときにモーダルがactiveになる。

以上!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?