在 Laravel 中使用 JWT(JSON Web Token)进行身份验证是一个常见的需求,尤其是在 API 开发中。这里有一个简单的指南,帮助你在 Laravel 项目中实现 JWT 身份验证。
推荐使用 tymon/jwt-auth
这个包来实现 JWT 身份验证。首先,通过 Composer 安装它:
composer require tymon/jwt-auth
安装完成后,发布 JWT 配置文件:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
这将在 config
目录下生成 jwt.php
文件。
接下来,你需要生成 JWT 密钥。运行以下命令:
php artisan jwt:secret
这将生成一个新的密钥并将其添加到 .env
文件中,密钥通常是以 JWT_SECRET
作为键。
在 config/auth.php
中更新 guards
部分,将 api
作为 JWT 驱动:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'jwt', 'provider' => 'users', ], ],
在你的项目中创建一个控制器,来处理用户注册和登录等功能:
php artisan make:controller AuthController
在 AuthController
中,你可以编写如下代码:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use Tymon\JWTAuth\Facades\JWTAuth; use Tymon\JWTAuth\Exceptions\JWTException; class AuthController extends Controller { public function register(Request $request) { $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6|confirmed', ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => bcrypt($request->password), ]); return response()->json(['message' => 'User registered successfully'], 201); } public function login(Request $request) { $credentials = $request->only('email', 'password'); try { if (!$token = JWTAuth::attempt($credentials)) { return response()->json(['error' => 'invalid_credentials'], 401); } } catch (JWTException $e) { return response()->json(['error' => 'could_not_create_token'], 500); } return response()->json(compact('token')); } public function logout() { JWTAuth::invalidate(JWTAuth::getToken()); return response()->json(['message' => 'User logged out'], 200); } public function me() { return response()->json(auth()->user()); } }
在 routes/api.php
中定义路由,以便用户可以注册、登录、查看个人信息等:
use App\Http\Controllers\AuthController; Route::post('register', [AuthController::class, 'register']); Route::post('login', [AuthController::class, 'login']); Route::get('logout', [AuthController::class, 'logout'])->middleware('auth:api'); Route::get('me', [AuthController::class, 'me'])->middleware('auth:api');
通过在路由中使用 middleware('auth:api')
,你可以保护特定的 API 路由,确保用户必须通过 JWT 身份验证才能访问。
现在你可以使用 Postman 进行 API 测试:
/api/register
发送一个 POST 请求,包含 name
、email
和 password
。/api/login
发送一个 POST 请求,包含 email
和 password
,你将收到一个 JWT 作为响应。Authorization
设置为 Bearer YOUR_JWT_TOKEN
,然后可以访问 /api/me
或其他受保护的路由。标签: 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。