そもそもの仕様
Laravelでログインする対象カラム (デフォルトはemail)は、AuthenticatesUsers::usernameで一元管理されている
Auth\LoginControllerではAuthenticatesUsersトレイトを利用しているので、
オーバーライド(=設定の上書き)が可能
ログインする対象のカラムをlogin_idに変更する
- Auth\LoginController.phpに
usernameメソッドを記載
<?php
// (省略)
public function username()
{
// ⭐️ emailの代わりに使用したいカラム名を指定する
return 'login_id';
}これでオーバーライドされてlogin_idカラムがチェック対象になる
emailでもlogin_idでもログインさせたい場合
AuthenticatesUsers::attemptLoginをオーバーライドする
- Auth\LoginController.phpに
attemptLoginメソッドを追記
<?php
// (省略)
protected function attemptLogin(Request $request)
{
$username = $request->input($this->username());
$password = $request->input('password');
if (filter_var($username, \FILTER_VALIDATE_EMAIL)) {
$credentials = ['email' => $username, 'password' => $password];
} else {
$credentials = [$this->username() => $username, 'password' => $password];
}
return $this->guard()->attempt($credentials, $request->filled('remember'));
}LoginControllerでuse Illuminate\Http\Request;を記載していない場合はこれも追記
解説
if (filter_var($username, \FILTER_VALIDATE_EMAIL)) で、入力された値( = $username)がメールアドレス形式かどうかを判定している
結果がtrueの場合はemailカラムを、
falseの場合はusernameメソッドで上書きしたカラムを見に行くように条件分岐してる














Laravelではemailログインがデフォルトだけど、
ログインIDなど他のカラムでログインしたい場合もある