1、首先,你需要安装 tymon/jwt-auth 扩展包。可以通过 Composer 进行安装:
composer require tymon/jwt-auth
2、安装完成后,你需要发布 JWT 的配置文件和生成 JWT 的密钥。运行以下命令:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
php artisan jwt:secret
这些命令将生成 config/jwt.php 配置文件,并在 .env 文件中添加 JWT_SECRET。
3、接下来,打开 config/auth.php 文件,将默认的用户提供者设置为 JWT 提供者。修改 $guards 数组中的 api 项:
'guards' => [ 'api' => [
'driver' => 'jwt', 'provider' => 'users', ],
],
4、然后,打开 app/Http/Kernel.php 文件,将 jwt.auth 和 jwt.refresh 中间件添加到 $routeMiddleware 数组中:
protected $routeMiddleware = [ 'jwt.auth' =>
\Tymon\JWTAuth\Http\Middleware\Authenticate::class, 'jwt.refresh' =>
\Tymon\JWTAuth\Http\Middleware\RefreshToken::class, ];
5、接下来,你需要创建一个控制器来处理用户身份验证。运行以下命令来生成控制器:
php artisan make:controller AuthController
6、在生成的 AuthController 文件中,编写以下方法:
namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AuthController extends Controller { public function login(Request $request) { $credentials = $request->only('email', 'password'); if (!$token = Auth::attempt($credentials)) { return response()->json(['error' => 'Unauthorized'], 401); } return $this->respondWithToken($token); } protected function respondWithToken($token) { return response()->json([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => auth()->factory()->getTTL() * 60 ]); } }
7、在上述代码中,我们创建了 login 方法来处理用户登录请求。在 login 方法中,我们使用 $request->only('email', 'password') 获取用户输入的邮箱和密码,然后使用 Auth::attempt($credentials) 进行身份验证。如果验证通过,将返回包含访问令牌的 JSON 响应。
接下来,你需要创建一些路由来处理身份验证。打开 routes/api.php 文件,并添加以下路由:
use App\Http\Controllers\AuthController; Route::post('login', [AuthController::class, 'login']); Route::group(['middleware' => 'jwt.auth'], function () { // 在这里添加需要身份验证的路由 Route::get('/profile', function () { return response()->json(['user' => auth()->user()]); }); });
在上述代码中,我们创建了 /login 路由用于用户登录,并将请求指向 AuthController 的 login 方法。还创建了 /profile 路由,该路由需要进行身份验证,并返回当前登录用户的信息。
现在,你可以使用任何 HTTP 客户端(如 Postman)来测试这些路由。发送 POST 请求到 /login 路由,并在请求体中传递 email 和 password 参数。如果验证成功,你将收到一个包含访问令牌的 JSON 响应。然后,你可以使用获得的访问令牌通过 GET 请求访问 /profile 路由,获取当前登录用户的信息。
这就是在 Laravel 8 中正确配置和使用 JWT 的示例。希望能解决你的问题!