※前回に引き続き、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()の戻り値は配列形式で、キーは認証テーブルのカラム名と一致させる