Ccmmutty logo
Commutty IT
1
0 pv3 min read

【Laravel】ログイン認証のcredentialsをカスマイズしよう!

https://cdn.magicode.io/media/notebox/laravel03_credentials.png
※前回に引き続き、Laravel UIを前提としています

credentialsの基本

credentials()はリクエストから必要な認証資格情報を取得するメソッドです。
Laravel UIインストール時の初期状態は以下のようになっています。
protected function credentials(Request $request)
{
    return $request->only($this->username(), 'password');
}
$requestにはログイン画面から送られてきたパラメータが含まれています。
username()には「email」が定義されているので、このメソッドはリクエストの中からemailとpasswordを抽出した配列を返していることがわかります。
credentials()の戻り値を出力すると以下のようになります。
[
 "email" => 入力されたメールアドレス
 "password" => 入力されたパスワード
]
配列のキーと認証テーブルのカラム名が対応しており、値が合致するかが認証成功の条件となります。

認証テーブルを変更したい場合

config/auth.phpにて認証に使用するテーブルまたはモデルを定義しています。デフォルトではUserモデルを使用していますが、任意のモデルに変更することができます。
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class, // ここを変更
    ],
],
モデルではなくテーブルを指定することも可能です。
'providers' => [
    'users' => [
        'driver' => 'database',
        'table' => 'users', // ここを変更
    ],
],

カスタマイズ例

①:入力項目を追加したい

メールアドレスとパスワードの他に、「ユーザーコード」という項目の入力フォームを追加するとします。
リクエストに「user_code」というパラメータを追加し、認証テーブルにも同名のカラム「user_code」を追加しておきます。
protected function credentials(Request $request)
{
    return $request->only($this->username(), 'password', 'user_code');
}
抽出対象に「user_code」を追加するだけで、認証条件を増やすことができます。

②:特定の権限を持つユーザーのみログインさせたい

認証テーブルの権限カラム「role」が0のユーザーのみログインさせるとします。
protected function credentials(Request $request)
{
    $admin = 0;
    return array_merge(
        $request->only($this->username(), 'password'),
        ['role' => $admin]
    );
}
配列に対象のカラム名と値を追加することで、認証条件を増やすことができます。

まとめ

  • credentials()で取得した認証条件と認証テーブルの情報が一致すると認証成功
  • credentials()の戻り値は配列形式で、キーは認証テーブルのカラム名と一致させる

Discussion

コメントにはログインが必要です。