LaravelのAPI認証をやくざの「仁義を切る」って似てません?
はじめに
最近業務でLaravel のAPI認証を用いた動作確認を業務でやってたことがありましたので勉強がてらに記事にしていこうかなと思います。
今回は、LaravelのAPI認証をやくざの世界に例えて説明してみます。(Youtubeでたまたまやくざの動画を見たので。。)
やくざの世界では、仁義や礼儀が非常に重要です。同様に、APIの世界でも適切な認証と権限管理が重要です。では、やくざの「仁義を切る」プロセスになぞらえて、LaravelのAPI認証を見ていきます。
「やくざの仁義を切る」とは?
LaravelのAPI認証の基礎(やくざの世界で例えると)
LaravelのAPI認証では、主に以下の手順を踏みます。
ユーザー登録: 新しいメンバー(ユーザー)を組に迎え入れる。
ログイン認証: 組の内部にアクセスするための認証を行う。
トークン発行: 認証されたメンバーに専用の通行証(トークン)を発行する。
アクセス制御: メンバーが適切なエリア(リソース)にアクセスできるように制御する。
ユーザー登録: 新しいメンバーを迎え入れる
やくざの組に新しいメンバーを迎え入れるように、APIでも新しいユーザーを登録します。Laravelでは、ユーザー登録のためにルートやコントローラー、モデルを設定します。
// ルートの設定
Route::post('register', 'YakuzaController@register');
// コントローラーの実装
class YakuzaController extends Controller
{
public function register(Request $request)
{
// 新しい組員が入る前にしっかりとチェックする
$validatedData = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8',
]);
// 新しい組員をデータベースに登録する
$newMember = User::create([
'name' => $validatedData['name'],
'email' => $validatedData['email'],
'password' => bcrypt($validatedData['password']),
]);
// 登録完了のメッセージを返す
return response()->json(['message' => 'ようこそ、組に迎えられました!'], 201);
}
}
アクセスする
ログイン認証: 組の内部にアクセスする
新しいメンバーが組に正式に加わるためには、認証が必要です。同様に、ユーザーがAPIにアクセスするためには、ログインして認証される必要があります。
// ルートの設定
Route::post('login', 'YakuzaController@login');
// コントローラーの実装
class YakuzaController extends Controller
{
public function login(Request $request)
{
// 組に入るための資格情報を確認する
$credentials = $request->only('email', 'password');
// 資格情報が正しいかどうかを確認する
if (Auth::attempt($credentials)) {
$member = Auth::user();
// 通行証(トークン)を発行する
$token = $member->createToken('組の通行証')->accessToken;
return response()->json(['token' => $token, 'message' => '組へのアクセスが許可されました'], 200);
} else {
// 認証に失敗した場合
return response()->json(['message' => '認証に失敗しました。組へのアクセスは拒否されました'], 401);
}
}
}
トークン発行: 通行証を渡す
認証が完了すると、やくざの組では新しいメンバーに通行証のようなものを渡します。Laravelでは、これに相当するのがAPIトークンの発行です。このトークンを使って、ユーザーはAPIにアクセスできるようになります。
// やくざの通行証を発行する
$member = Auth::user();
$token = $member->createToken('組の通行証')->accessToken;
アクセス制御: 適切なエリアにアクセスさせる
やくざの世界でも、新しいメンバーがすべてのエリアに自由にアクセスできるわけではありません。同様に、APIでもユーザーが適切な権限を持っているかどうかをチェックし、アクセス制御を行います。
// ミドルウェアの設定
public function handle($request, Closure $next)
{
// 組員が通行証を持っているか確認する
if (!Auth::guard('api')->check()) {
return response()->json(['message' => '通行証が必要です。'], 401);
}
return $next($request);
}
// ミドルウェアの登録
protected $routeMiddleware = [
'auth:api' => \App\Http\Middleware\YakuzaAuthenticate::class,
];
結論
今回は何となくこのような感じで例えて、記事にしてみてましたが、
やくざの「仁義を切る」とLaravel のAPI認証のプロセスってユーザー登録、ログイン認証、トークン発行、そしてアクセス制御の各ステップは、なんか似ているようにかんじました。LaravelのAPI認証を効果的に実装することで、システムのセキュリティと信頼性を確保することができますよね。
これで、LaravelのAPI認証についての解説をやくざの仁義を切る例えで終わります。
今後、記事にすることがあればAPI認証を深堀していこうと思います。