Laravel8でgardをもう一つ作る

一般的にはマルチ認証という言い方をするらしいです。Larabelの既存のログイン方法(UI)に別の認証方法を追加する方法です。要件として会員やメンバーのカテゴリーが複数ある場合や一般ユーザーと管理ユーザーに分ける場合(権限を分ける場合)などに使えると思います。
管理ログインURIは /login/admin とし、管理画面は /admin 以下として、リセットパスワードができるようにします。
すでにLaravelのauthが実行されていることを前提にしてます。

adminテーブルのマイグレーションとモデル

モデルとマイグレーションを一緒に作成することができます。どっちにしろ必要なのでマイグレーションとモデルと一緒に作成してしまいます。
Laravelの例によってモデルは単数形(Admin)、マイグレーションは複数形(admins)になります。

$ php artisan make:model Admin --migration
($ ./vendor/bin/sail artisan make:model Admin --migration)

以下の2つのファイルが作成されます。

app/app/Models/Admin.php
app/database/migrations/YYYY_MM_DD_HHMMSS_create_admins_table.php

テーブルの作成

管理ユーザーを格納するテーブルを作成ます。

// app/database/migrations/YYYY_MM_DD_HHMMSS_create_admins_table.php

class CreateAdminsTable extends Migration
{
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAdminsTable extends Migration
{
  /**
   * Run the migrations.
   *
   * @return void
   */
  public function up()
  {
    Schema::create('admins', function (Blueprint $table) {
      $table->id();
      $table->string('name');
      $table->string('email')->unique();
      $table->string('password');
      $table->boolean('is_super')->default(false);
      $table->rememberToken();
      $table->softDeletes();    
      $table->timestamps();
    });
  }

  /**
   * Reverse the migrations.
   *
   * @return void
   */
  public function down()
  {
    Schema::dropIfExists('admins');
  }
}

テーブルを作成します。

$ ./vendor/bin/sail artisan migrate
$ ./vendor/bin/sail artisan migrate
Migrating: YYYY_MM_DD_HHMMSS_create_admins_table
Migrated:  YYYY_MM_DD_HHMMSS_create_admins_table (84.27ms)

モデルの作成

モデルを作成します。

<?php
// app/app/Models/Admin.php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Admin extends Model
{
  use HasFactory;
  use Notifiable;

  protected $guard = 'admin';

  protected $fillable = [
    'name', 'email', 'password',
  ];

  protected $hidden = [
    'password', 'remember_token',
  ];
}

Guardを作る

既存のguard定義にadmiinを追加します。

//app/config/auth.php

'guards' => [
      'web' => [
        'driver' => 'session',
        'provider' => 'users',
      ],

      'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
      ],
      'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
      ],
    ],

プロバイダーも追加します。

//app/config/auth.php
    'providers' => [
      'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
      ],
      'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],

裏側の修正と設定はここまでです。

Front側のログイン画面などを作る

管理画面のログインなどを担うコントローラを作成します。

coming soon


  • News

  • Categories

  • Tags

  • Archives

  • Page index