LoginSignup
7
6

More than 1 year has passed since last update.

Laravelで標準のUsersテーブルからテーブル名を変更して認証を行う際に修正が必要なファイル

Posted at

環境

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]

  • テーブル名の明記
  • プライマリキーの明記
User.php
protected $table = 'm_user';
protected $primaryKey = 'user_id';

登録コントローラー[app/Http/Controllers/Auth/RegisterController.php]

  • バリデーションルールの中のテーブル名を修正
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
auth.php
// 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]

マイグレーションファイルのテーブル名とプライマリキーの記述箇所を修正

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も絡んでくるだろうし、その場合はちょっと時間がかかりそうな感じがしますが、それはまた追々・・・

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6