はじめに
Day19 では、
✅ API 仕様書を作成
✅ エンドポイント一覧を定義
しました。
今日はその設計をもとに、
👉 実際にユーザー登録・ログイン API を実装
していきます。
今日のゴール
・ユーザー登録 API を実装できる
・ログイン API で JWT を発行できる
・API 仕様どおりのレスポンスを返せる
前提条件
・Laravel API プロジェクト作成済み
・JWT 認証(Day16)導入済み
・User モデル作成済み
ルーティング定義
routes/api.php
Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
Route::middleware('auth:api')->group(function () {
Route::get('/me', [AuthController::class, 'me']);
});
コントローラ作成
php artisan make:controller AuthController
ユーザー登録 API
① バリデーション
use Illuminate\Support\Facades\Hash;
use App\Models\User;
public function register(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8'
]);
② ユーザー作成
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
③ レスポンス返却
return response()->json([
'status' => 'success',
'data' => $user
], 201);
}
ログイン API(JWT発行)
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (!$token = auth('api')->attempt($credentials)) {
return response()->json([
'status' => 'error',
'message' => 'メールアドレスまたはパスワードが正しくありません'
], 401);
}
return response()->json([
'status' => 'success',
'access_token' => $token,
'token_type' => 'Bearer'
]);
}
自分の情報を取得する API
public function me()
{
return response()->json([
'status' => 'success',
'data' => auth('api')->user()
]);
}
動作確認(Postman)
① ユーザー登録
POST /api/register
{
"name": "test",
"email": "test@example.com",
"password": "password123"
}
② ログイン
POST /api/login
トークンが返れば成功 🎉
③ 認証付きリクエスト
GET /api/me
Authorization: Bearer xxx.yyy.zzz
よくあるエラー
❌ password が保存されない
👉 Hash::make() 忘れ
❌ auth()->user() が null
👉 auth('api') を使っているか確認
❌ unique エラー
👉 unique:users,email の指定漏れ
実装のポイント
・バリデーションは必須
・パスワードは必ずハッシュ化
・エラーメッセージはフロント向けに
・ステータスコードを意識する
今日のまとめ
・設計した API を実装に落とした
・ユーザー登録ができる
・JWT を発行できる
・認証付き API が動いた
次回 Day21
次はフロント側です。
Day21 — Reactでログイン画面を作成し、APIと連携する
「バックエンドだけ」を卒業します。