---
> ###### 首先说明 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 是如何生成的它具有什么样的特征