ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
--- > ###### 首先说明 JWT 是什么, 它和权限认证之间的关系是什么, 我们如何来优雅的使用 JWT 这一工具以及其背后的深刻原理 ## 一、安装 JWT 的扩展包 > 需要安装的包, 采用 composer 的方式安装 https://jwt-auth.readthedocs.io/en/develop/laravel-installation/ composer require tymon/jwt-auth ## 二、配置 > 文档中说需要配置provider, 5.4 以下, 这里我们是8.5就不用配置了 #### 发布我们的配置文件 php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" ![图片alt](/media/editor/1630034883368_20210827112806242505.png ''图片title'') > #### 生成秘钥到 env 中 ![图片alt](/media/editor/1630034968762_20210827112931650476.png ''图片title'') > #### 有了门后我们就安装,安装好后我们需要让保安执行守护哪一个门, `auth.php` ![图片alt](/media/editor/1630035233074_20210827113355980291.png ''图片title'') > 添加下面这一行代码, 识别我们的验证驱动 JWT 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'blog' => [ 'driver' => 'jwt', 'provider' => 'users', ], ], > 注意模型不要配置错误 User 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], > 原来我们已经有了 User 表, 这个表是安装 laravel-permission 后生成的我们就用这个 User模型。实现了 JWT 的接口我们需要重实现两个方法 class User extends Authenticatable implements JWTSubject > 实现 JWT 的两个方法并改造 public function getJWTIdentifier() { return $this->getKey(); } public function getJWTCustomClaims() { return []; // 存放一些自定义的信息到JWT的token } ### 三、如何使用 > #### 还是原来的的控制器 > 添加一个新角色和用户 $user = Role::create(['name' => 'root']); $user = User::query()->create([ 'name' => 'white', 'email' => '986247535@qq.com', 'password' => '123456', ]); > ##### 编写控制器中的方法来生成我们的 Token, 值得注意的是什么? 在 User 我们需要获取这个模型而不是获取一个集合或者数组 $user = User::query()->where('name','white')->first(); $token = Auth::guard('blog')->login($user); //这里会返回一个 Token > #### 返回的 TOKEN 如下, 三部分如下 "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. eyJpc3MiOiJodHRwOlwvXC9sYXJhdmVsLWFuZ3VsYXItYmxvZy50ZXN0XC9ibG9nXC9hdXRoXC9sb2dpbiIsImlhdCI6MTYzMDA1MzI2NiwiZXhwIjoxNjMwMDU2ODY2LCJuYmYiOjE2MzAwNTMyNjYsImp0aSI6InJBN2Z4aFZ5RTh3UE5HZXciLCJzdWIiOjEsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ. yZaa83ggAIcQlIH0y_od0zw27rrg_fqgulMy3QHMfYg" ### 四、JWT 是如何生成的它具有什么样的特征