安装:
在项目根目录执行代码
composer require thans/tp-jwt-auth
composer require firebase/php-jwt
要是不行就多试几次,这个连接有点不稳定。
安装好后,在config里会多出一个文件
这样就是安装成功
然后创建一个server文件夹(这个无所谓),创建一个php类
<?php
namespace app\admin\Server; // 这个改成自己正常的地址,不然用不了,其他可以复制
use \Firebase\JWT\JWT;
class Token
{
//生成token
public function signToken($uid)
{
$key = '!@#$%*&'; //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当 于加密中常用的 盐 salt
$token = array(
"iss" => $key, //签发者 可以为空
"aud" => '', //面象的用户,可以为空
"iat" => time(), //签发时间
"nbf" => time() + 3, //在什么时候jwt开始生效
"exp" => time() + 10, //token 过期时间
"data" => [ //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
'uid' => $uid,
]
);
$jwt = JWT::encode($token, $key, "HS256"); //根据参数生成了 token
return $jwt;
}
//验证token
function checkToken($token)
{
$key = '!@#$%*&';
$status = array("code" => 2);
try {
JWT::$leeway = 60; //当前时间减去60,把时间留点余地
$decoded = JWT::decode($token, $key, array('HS256')); //HS256方式,这里要和签发的时候对应
$arr = (array)$decoded;
$res['code'] = 1;
$res['data'] = $arr['data'];
return $res;
} catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
$status['msg'] = "签名不正确";
return $status;
} catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
$status['msg'] = "token失效";
return $status;
} catch (\Firebase\JWT\ExpiredException $e) { // token过期
$status['msg'] = "token失效";
return $status;
} catch (Exception $e) { //其他错误
$status['msg'] = "未知错误";
return $status;
}
}
}
然后再需要的地方引入
$Token = new Token(); // 实例
$token = $Token->signToken($uid); // 调用方法