Contents
Laravelの主な認証方法たち
① Laravel Breeze
- 🐣 シンプルな認証スターターキット。
- Blade or Inertia(Vue/React)対応。
- ログイン、登録、パスワードリセットなど、基本機能がすぐ使える。
- 学習目的・小〜中規模アプリにぴったり!
② Laravel Jetstream
- Breezeの進化系。
- Inertia(Vue)か Livewire が前提。
- チーム管理、2要素認証、セッション管理など高機能。
- 大規模 or ユーザー管理が複雑なアプリ向け。
- UIの自由度はちょっと低め。
③ Laravel Fortify
- Jetstreamの「バックエンドだけ版」。
- 自分でフロントを作りたい人向け。
- APIベースで、SPAやモバイルアプリと相性よし。
- 独自UIを作るけど認証ロジックは任せたい派向け。
④ Laravel Sanctum
- API認証用のトークンベース認証(SPAやモバイル向け)。
- セッションクッキーを使ったSPA向け認証 or APIトークン認証どちらも可。
- トークン制御が柔軟で、SPA開発によく使われる。
⑤ Laravel Passport
- OAuth2対応のがっつりAPI認証。
- 外部サービスへの提供とか、本格的なAPI認証に。
- 重たい & 学習コスト高め、なので今はSanctumのほうが人気。
シナリオ | よく使われる認証方式 |
---|---|
通常のWebアプリ(Blade) | Breeze 👍 |
SPA(Vue/React) | Breeze + Sanctum or Fortify + Sanctum |
チーム・2FAなど高度な機能 | Jetstream |
API単体・OAuth対応が必要 | Passport |
Sanctumでシンプルな認証
トークンベースの認証により、ステートレスなAPI通信が可能

シンプルなメモアプリのAPI
// routes/api.php
// ユーザー登録
Route::post('/register', function (Request $request) {
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$token = $user->createToken('auth-token')->plainTextToken;
return response()->json([
'token' => $token
]);
});
// ログイン
Route::post('/login', function (Request $request) {
$user = User::where('email', $request->email)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
return response()->json(['message' => 'Unauthorized'], 401);
}
$token = $user->createToken('auth-token')->plainTextToken;
return response()->json([
'token' => $token
]);
});
// routes/api.php
Route::middleware('auth:sanctum')->group(function () {
// メモの作成
Route::post('/memos', function (Request $request) {
$memo = $request->user()->memos()->create([
'title' => $request->title,
'content' => $request->content
]);
return response()->json($memo);
});
// メモの取得
Route::get('/memos', function (Request $request) {
$memos = $request->user()->memos;
return response()->json($memos);
});
});
// ログイン
async function login() {
const response = await fetch('api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: 'user@example.com',
password: 'password123'
})
});
const data = await response.json();
// トークンを保存
localStorage.setItem('token', data.token);
}
// メモを作成
async function createMemo() {
const response = await fetch('api/memos', {
method: 'POST',
headers: {
'Authorization': `Bearer ${localStorage.getItem('token')}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: '新しいメモ',
content: 'メモの内容'
})
});
const memo = await response.json();
console.log('作成されたメモ:', memo);
}