0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

3. 認証の導入

Last updated at Posted at 2025-02-09

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.phpregister ルートを削除
コントローラで制限 RegisterControllerabort(403) を返す
Bladeからリンク削除 register へのリンクを削除
ミドルウェアで制限 admin ミドルウェアを作成し、管理者のみ登録可
管理者が手動登録 php artisan tinker または管理画面で追加

これで、一般ユーザーが自由に登録できないようにしつつ、管理者が手動でユーザーを追加できるようになります!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?