ヤマモト
2024.09.25
36
こんにちは、山本です。
今回はLaravel環境 でJWT認証について実装してみました。
JWT (JSON Web Token) 認証とは、Webアプリケーションでユーザーの認証と承認を行うためのオープンスタンダードのこと。
以下がポイント。
①トークンベースの認証
JWTは、ユーザーがログインするときに生成されるトークンを使用する。
このトークンは、ユーザーの認証情報を含むJSON形式のデータ。
②セッション管理の代替
セッションベースの認証では、サーバーがユーザーのセッション情報を保持するが、JWTではクライアント側がトークンを保持する。
これにより、サーバーの負荷が軽減され、スケーラビリティが向上する。
③セキュリティ
JWTは署名されており、改ざんされていないことを保証する。署名には秘密鍵が使用され、サーバーだけがその秘密鍵を知っている。
任意のプロジェクトディレクトリに移動し、下記コマンドでJWT認証のパッケージをインストールする。
composer require tymon/jwt-auth
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
php artisan jwt:secret
config/auth.phpを下記のように書き換える。
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
下記のようにUserモデルに追記する。
use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable implements JWTSubject
{
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
}
php artisan make:controller AuthController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;
use App\Models\User;
class AuthController extends Controller
{
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return response()->json([
'message' => 'Login successful',
'token' => $token
]);
}
public function register(Request $request)
{
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
$token = JWTAuth::fromUser($user);
return response()->json([
'message' => 'Registration successful',
'token' => $token
]);
}
}
routes/api.php を編集。
Route::post('login', [AuthController::class, 'login']);
Route::post('register', [AuthController::class, 'register']);
postmanを使用して確認する。
名前 : test1
メールアドレス : test1@example.com
パスワード : password
上記のユーザーを登録。
登録したユーザーでログインを確認する。
9
ヤマモト
2024.09.19
19
ヤマモト
2024.09.17
12
ヤマモト
2024.09.11