どうも、こんにちわ。
今回はLaravelの簡単なネタを1つ。
Laravelでは簡単に会員登録などの認証機能(Auth)を実装することができますが、デフォルトの仕様では「メールアドレス」と「パスワード」の組み合わせでログインするようになっています。ただ、サービスによってはメールアドレスではなくユーザーIDやユーザー名などでログイン機能を実装したい場合もあるかと思います。
そこで、今回はメールアドレスではなくユーザー名等、他の情報をログインIDとして使用できるようにする方法を紹介したいと思います。とても簡単ですし、そういった用途も多いと思うので覚えておくと便利です。
環境
なお、今回のLaravel環境は以下の通りとなります。
今回の環境
- Laravel 5.4.36
認証機能実装
まず、認証機能を実装するところから念の為説明しておくと、Laravel標準の認証機能は下記のコマンドで実装することができます。
$ php artisan make:auth
これだけで基本的な標準認証機能を実装することができます。デフォルトの画面であれば右上に「login」や「register」のようなボタンが表示されていると思います。
制御ファイルの場所
上記のコマンドを実行したら、「/app/Http/Controllers/」に「Auth」というディレクトリの中に下記4つのファイルが格納されていると思います。その他にも表示(View)に関するファイル等いくつできるのですが、この4ファイルが認証機能に関するControllerファイルになります。
認証機能に関するファイル
- LoginController.php
- RegisterController.php
- ForgotPasswordController.php
- ResetPasswordController.php
そして、この中でログイン部分を制御するファイルが、名前からも分かる通り「LoginController.php」になります。今回はこの部分を少しだけカスタマイズすることになります。
メールアドレスではなくユーザーIDをログインIDとして設定
では、実際にメールアドレスではなく他のIDでログインできるように設定していきます。
今回はユーザー情報にユーザー名があるという前提でユーザー名(user_name)をログインIDとして設定します。Laravelの標準認証機能ではユーザー名の項目はないので「RegisterController.php」で実装しなければなりませんが、そこの部分は今回の趣旨と異なるので割愛します。
まずは、「LoginController.php」は開いてみます。
ファイルを開くと下記のコード(名前空間)があるかと思います。
use Illuminate\Foundation\Auth\AuthenticatesUsers;
このコードの意味するところは、簡単に言うとこのパスのファイルを参照しているということになります。つまりこのパスにあるファイルのメソッド等をインポートしているということです。
ちなみにこのパスが示すファイルの場所は「/vender/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php」になります。
そして、この「AuthenticatesUsers.php」の中にログインIDを設定するメソッドがあります。
その部分が下記。
public function username()
{
return 'email';
}
見れば分かる通り、メソッド内で「email」を返しているのが分かると思います。この部分がログインIDになります。
これで、ログインIDを設定しているメソッドがわかったので、このメソッドを「LoginController.php」ファイル内でオーバーライドしてあげればいいだけです。
//オーバーライド
public function username()
{
return 'user_name'; //ユーザー名
}
これで完了です。ユーザー名とパスワードの組み合わせでログインできるようになっていると思います。
まとめ
ということで、今回はLaravelの標準認証機能のログインに関するIDをメールアドレスではなく他の情報(ユーザー名等)をログインIDとして設定する方法を紹介させていただきます。今回は仮にユーザー名をIDとしましたが、ユニークなものであれば別のものでも大丈夫なので、環境に合わせて設定すると良いと思います。
てな感じで今回はここまで!また!