3.1 Laravelの標準認証について
Laravelでは、認証機能が標準で提供されており、主に以下の方法で認証を実装できます。
** Laravelの認証オプション**
方法 | 概要 |
---|---|
Laravel Breeze | 軽量な認証システム(初心者向け) |
Laravel Jetstream | 高機能な認証システム(チーム管理向け) |
Sanctum | APIトークンベースの認証(SPAやモバイルアプリ向け) |
Passport | OAuth2ベースの認証(より高度なAPI認証) |
初心者向けには、Laravel Breeze を使用するのが最も簡単です。
3.2 Laravel Breezeの導入
Laravel Breezeは、シンプルな認証機能を提供するパッケージです。
** Breezeのインストール**
composer require laravel/breeze --dev
php artisan breeze:install
npm install && npm run dev
php artisan migrate
** ルートの設定**
開発サーバーを起動して、ログイン・登録ページを確認する。
php artisan serve
http://127.0.0.1:8000/login
にアクセス。
3.3 ユーザー登録を無効にする
デフォルトでは、Laravelの認証システムでは誰でも登録できますが、それを防ぐ方法を紹介します。
** ルート(register
)を無効化**
routes/web.php
を開き、register
ルートを削除または無効化します。
Route::get('/register', function () {
abort(403, '新規登録はできません');
});
Route::post('/register', function () {
abort(403, '新規登録はできません');
});
3.4 コントローラでユーザー登録を制限
BreezeやJetstreamを使用している場合、RegisterController
を変更して登録を無効化できます。
** app/Http/Controllers/Auth/RegisterController.php
の修正**
use Illuminate\Http\Request;
public function register(Request $request)
{
abort(403, '新規登録は管理者のみ可能です');
}
3.5 Bladeテンプレートから登録リンクを削除
フロントエンドの register
へのリンクを削除し、登録フォームが表示されないようにします。
** resources/views/auth/login.blade.php
**
{{-- ユーザー登録リンクを削除 --}}
{{-- <a href="{{ route('register') }}">新規登録</a> --}}
3.6 ミドルウェアで登録を制限
管理者のみがユーザー登録できるようにするために、カスタムミドルウェアを作成します。
** app/Http/Middleware/CheckAdmin.php
を作成**
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class CheckAdmin
{
public function handle(Request $request, Closure $next)
{
if (!Auth::check() || Auth::user()->role !== 'admin') {
abort(403, '管理者のみユーザーを登録できます');
}
return $next($request);
}
}
** app/Http/Kernel.php
にミドルウェアを登録**
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\CheckAdmin::class,
];
** register
にミドルウェアを適用**
Route::post('/register', [RegisterController::class, 'register'])->middleware('admin');
3.7 管理者が手動でユーザーを追加
** Artisanコマンドで手動追加**
php artisan tinker
use App\Models\User;
use Illuminate\Support\Facades\Hash;
User::create([
'name' => 'Admin User',
'email' => 'admin@example.com',
'password' => Hash::make('password123'),
'role' => 'admin'
]);
** 管理画面を作成してユーザー追加**
Route::middleware('admin')->group(function () {
Route::get('/admin/users', [UserController::class, 'index']);
Route::post('/admin/users/create', [UserController::class, 'store']);
});
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8',
]);
User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
return redirect('/admin/users')->with('success', 'ユーザーを追加しました');
}
** まとめ**
方法 | 内容 |
---|---|
ルートを無効化 |
routes/web.php で register ルートを削除 |
コントローラで制限 |
RegisterController で abort(403) を返す |
Bladeからリンク削除 |
register へのリンクを削除 |
ミドルウェアで制限 |
admin ミドルウェアを作成し、管理者のみ登録可 |
管理者が手動登録 |
php artisan tinker または管理画面で追加 |
これで、一般ユーザーが自由に登録できないようにしつつ、管理者が手動でユーザーを追加できるようになります!