安装
Laravel使用的jwt组件推荐使用tymon/jwt-auth
composer
composer require tymon/jwt-auth
部署
修改config/app.php
,添加内容
'providers' => [ Tymon\JWTAuth\Providers\LaravelServiceProvider::class, ]
在根目录执行
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
执行之后,你会在config文件夹内找到jwt.php
生成密钥
php artisan jwt:secret
之后你会在.env
中看到随机生成的key
JWT_SECRET=xxxxxx
配置验证的用户模型
用户验证的模型需要继承Authenticatable
并实现JWTSubject
,事例如下
<?php namespace App; use Tymon\JWTAuth\Contracts\JWTSubject; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable implements JWTSubject { use Notifiable; // Rest omitted for brevity /** * Get the identifier that will be stored in the subject claim of the JWT. * * @return mixed */ public function getJWTIdentifier() { return $this->getKey(); } /** * Return a key value array, containing any custom claims to be added to the JWT. * * @return array */ public function getJWTCustomClaims() { return []; } }
配置auth
修改auth.php
,我们需要将上面的model加入验证中
简易理解可分成三层
providers
可以理解为底层驱动,实现方式是数据库模型,还是redis,还是文件存储,都可以定义
'patients' => [ 'driver' => 'eloquent', 'model' => App\Models\PatientUser::class, ],
guards
使用什么验证方式,并用哪个驱动
'apipatient' => [ 'driver' => 'jwt', 'provider' => 'patients', ],
defaults
默认使用哪个作为用户验证
'defaults' => [ 'guard' => 'apidoctor', 'passwords' => 'users', ],
passwords 暂时不管,有时间再单独讲解
控制器使用
可以在控制器中构造函数引入中间件
public function __construct() { $this->middleware('auth:api', ['except' => ['login']]); }
简单调用
登录返回的token
$credentials = request(['mobile', 'password']); $token = auth($this->guard)->attempt($credentials)
或者通过自己的方式验证之后登录得到token
$token = auth($this->guard)->login($uid);
uid是一个user对象,因为之前配置user实现了JWTSubject,所以可以被作为参数