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?

Day20 — ユーザー登録API・ログインAPIをLaravelで実装する

Posted at

はじめに

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と連携する

「バックエンドだけ」を卒業します。

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?