Laravel Sanctumは、シンプルで軽量なAPIトークン認証を実現するためのパッケージで、シングルページアプリケーション(SPA)やシンプルなAPI認証用に設計されています。今回は、Laravel Sanctumを使ってREST API認証をシンプルに実装する方法を紹介します。
Laravel Sanctumのインストールとセットアップ
まず、LaravelプロジェクトにSanctumをインストールします。Composerを使用して、以下のコマンドを実行してください。
composer require laravel/sanctum
次に、Sanctumのマイグレーションと設定ファイルを公開します。
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
SanctumServiceProviderをconfig/app.phpのproviders配列に追加する必要はなく、Laravelでは自動的にプロバイダーが登録されます。
Middlewareの設定
Sanctumを無効化するか有効化するため、apiミドルウェアグループ内にSanctumのミドルウェアを設定します。app/Http/Kernel.phpを開き、以下のように追加します。
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
Userモデルの準備
Sanctumの認証システムを使用するには、認証対象のUserモデルにHasApiTokensトレイトを追加する必要があります。App\Models\User.phpを開き、次のように追加します。
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
APIルートの定義
routes/api.phpファイルでAPIルートを定義します。サインアップ、ログイン、ログアウト、そしてユーザー情報を取得するためのルートを作成しましょう。
use App\Http\Controllers\Api\AuthController;
Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
Route::post('/logout', [AuthController::class, 'logout']);
Route::get('/user', [AuthController::class, 'user'])->middleware('auth:sanctum');
コントローラクラスの作成
次に、AuthControllerを作成します。
php artisan make:controller Api/AuthController
コントローラでは、ユーザーの登録、ログイン、ログアウト、ユーザー情報取得の処理を定義します。
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function register(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8',
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
return response()->json($user, 201);
}
public function login(Request $request)
{
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
]);
$user = User::where('email', $request->email)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json(['access_token' => $token, 'token_type' => 'Bearer']);
}
public function logout(Request $request)
{
$request->user()->tokens()->delete();
return response()->json('Logged out successfully');
}
public function user(Request $request)
{
return response()->json($request->user());
}
}
認証のテスト
最後に、PostmanなどのAPIクライアントを使用してAPIエンドポイントをテストします。以下の手順に従って、API認証機能が正しく動作しているか確認します。
-
ユーザー登録:
/api/registerエンドポイントにPOSTリクエストを送信し、ユーザーを登録します。 -
ログイン: 登録したユーザーの資格情報を使用して、
/api/loginにPOSTリクエストを送信し、トークンを取得します。 -
ユーザー情報の取得: 取得したトークンをAuthorization headerにセットして、
/api/userにGETリクエストを送信します。 -
ログアウト:
/api/logoutにPOSTリクエストを送り、トークンの取り消しをテストします。
これで、Laravel Sanctumを使ったシンプルなREST API認証の実装が完了しました。この認証方法はSPAやモバイルアプリに最適で、安全かつ簡単にユーザーデータを保護することができます。


コメント