環境
Laravelの公式ドキュメントのmacOSで始める
に従って環境構築。
https://readouble.com/laravel/8.x/ja/installation.html?header=Laravel%25E3%2582%25A4%25E3%2583%25B3%25E3%2582%25B9%25E3%2583%2588%25E3%2583%25BC%25E3%2583%25A9
// PHPバージョン
$ sail php --version
PHP 8.1.4 (cli) (built: Apr 4 2022 13:30:33) (NTS)
// Laravelバージョン
$ sail artisan --version
Laravel Framework 9.6.0
// npmバージョン
$ sail npm --version
8.6.0
背景
新規システム開発でベテランエンジニアのアドバイスで、
「標準のUsersテーブルを現場で使うことはほぼない。」と言われた。
そして次のようなテーブルに変更することになった。
項目 | 変更内容 |
---|---|
テーブル名 | users -> m_user |
PKカラム | id -> user_id |
上記のような変更点を踏まえてログイン機能を実装することになった。
修正が必要なファイルの一覧
基本的に以下のファイルが修正が必要になる。
// 1.モデル
app/Models/User.php
// 2.登録コントローラー
app/Http/Controllers/Auth/RegisterController.php
// 3.設定ファイル
config/auth.php
// 4.マイグレーションファイル
database/migrations/2014_10_12_000000_create_users_table.php
それぞれのファイルの変更箇所を具体的に見ていきましょう!
レッツ、魚ぉ〜!
モデル[app/Models/User.php]
- テーブル名の明記
- プライマリキーの明記
protected $table = 'm_user';
protected $primaryKey = 'user_id';
登録コントローラー[app/Http/Controllers/Auth/RegisterController.php]
- バリデーションルールの中のテーブル名を修正
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
// 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], // 元々の記述
'email' => ['required', 'string', 'email', 'max:255', 'unique:m_user'], // unique:users -> unique:m_userに変更
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
このバリデーションルールで、uniqueを指定した場合、指定したテーブルのなかに該当のカラムを条件に、一致するものをcountするSQLが実行されるようです。
なので、ここでテーブル名を変更していないと、「テーブルが存在しません」っていうSQLエラーが表示されます。
設定ファイル[config/auth.php]
- 認証系の設定箇所でテーブル名を指定している部分の修正
あまり細かいことは理解できていません。
なので、全てが必要かどうかは分かっておりません。
以下の4箇所について修正が必要そう(usersの記述がある)
- Authentication Defaults
- Authentication Guards
- User Providers
- Resetting Passwords
// Authentication Defaults
'defaults' => [
'guard' => 'web',
// 'passwords' => 'users',
'passwords' => 'm_user',
],
// Authentication Guards
'guards' => [
'web' => [
'driver' => 'session',
// 'provider' => 'users',
'provider' => 'm_user',
],
],
// User Providers
'providers' => [
'm_user' => [ // ここが変更箇所!
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
// ↓最初からコメントアウトされていました。
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
// Resetting Passwords
'passwords' => [
'm_user' => [
'provider' => 'm_user',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
マイグレーションファイル[database/migrations/2014_10_12_000000_create_users_table.php]
マイグレーションファイルのテーブル名とプライマリキーの記述箇所を修正
public function up()
{
// createの第1引数渡すテーブル名を変更
Schema::create('m_user', function (Blueprint $table) {
$table->id('user_id'); // プライマリキーの名前を指定
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
}
まとめ
今回は完全に新しく認証に使用するモデルを作成したわけではないので、テーブル名の変更って形で行けたのかと思います。
独自のモデルで認証系を組む場合は、もっと別の留意点がありそうです。
middlewareも絡んでくるだろうし、その場合はちょっと時間がかかりそうな感じがしますが、それはまた追々・・・