Laravel 8 集成JWT实现登录功能 如何通过web.php路由生成JWT Token
Laravel 8 结合 JWT 生成登录 Token 实现方案
1 前置配置(未完成JWT配置需先执行)
- 安装适配Laravel 8的JWT扩展:
composer require tymon/jwt-auth:^1.0 - 发布扩展配置文件:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" - 生成JWT加密密钥:
php artisan jwt:secret - 调整User模型实现JWT接口,修改
app/Models/User.php代码:
<?php namespace App\Models; use Tymon\JWTAuth\Contracts\JWTSubject; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable implements JWTSubject { // 原有模型代码保持不变 // 新增以下两个方法 public function getJWTIdentifier() { return $this->getKey(); } public function getJWTCustomClaims() { return []; } }
- 修改认证配置
config/auth.php:
return [ 'defaults' => [ 'guard' => 'api', // 把默认guard改成api 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], // 新增api guard配置 'api' => [ 'driver' => 'jwt', 'provider' => 'users', 'hash' => false, ], ], // 原有其他配置保持不变 ];
2 完善登录控制器方法
修改你现有的login方法代码如下:
public function login(Request $request) { $email = $request->email; $password = $request->password; $data = [ 'email' => $email, 'password' => $password, ]; // 用你构造的认证数据生成JWT Token if (! $token = auth('api')->attempt($data)) { // 认证失败返回错误 return response()->json(['error' => '账号或密码错误'], 401); } // 认证成功返回token和相关信息 return response()->json([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => auth('api')->factory()->getTTL() * 60 ]); }
3 web.php定义登录路由
在routes/web.php中添加如下路由配置:
use App\Http\Controllers\你的控制器实际名称; // 登录路由,如果需要跳过csrf验证,可以把路由添加到App\Http\Middleware\VerifyCsrfToken的$except数组中 Route::post('/login', [你的控制器实际名称::class, 'login']);
注意:web路由默认开启csrf校验,如果你是用postman等工具调试接口,需要将
/login路径加入app/Http/Middleware/VerifyCsrfToken.php的$except属性中排除校验。
调用说明
发送POST请求到/login路径,携带email和password参数,验证通过后即可获取到JWT Token,后续请求在请求头中携带Authorization: Bearer 你的Token即可完成身份校验。
内容的提问来源于stack exchange,提问作者user12541100
相关产品推荐
相关产品推荐

