composer require firebase/php-jwt
1:签发
use \Firebase\JWT\JWT; //导入JWT
//签发Token
public function lssue()
{
$key = '344'; //key
$time = time(); //当前时间
$token = [
'iss' => 'http://www.baidu.com', //签发者 可选
'aud' => 'http://www.baidu.net', //接收该JWT的一方,可选
'iat' => $time, //签发时间
'nbf' => $time , //某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
'exp' => $time+7200, //过期时间,这里设置2个小时
'data' => [
'userid' => 1,
'username' => '刘德华'
]
];
}
2:验证
use \Firebase\JWT\JWT; //导入JWT
public function verification(){
$key = '344'; //key要和签发的时候一样
try {
JWT::$leeway = 60;//当前时间减去60,把时间留点余地
$decoded = (array)JWT::decode(request()->header()['token'], $key, ['HS256']);
print_r($decoded);
} catch (\Firebase\JWT\SignatureInvalidException $e) {
//签名不正确
throw new HttpException(config('status.token'), 'Token无效');
} catch (\Firebase\JWT\BeforeValidException $e) {
// 签名在某个时间点之后才能用
throw new HttpException(config('status.token'), 'Token暂未生效');
} catch (\Firebase\JWT\ExpiredException $e) {
//签名已过期,可刷新一个新token
throw new HttpException(config('status.token'), 'Token已过期');
} catch (\Exception $e) {
//其他错误
throw new HttpException(config('status.token'), $e->getMessage());
}
}