1.安装JWT
composer require firebase/php-jwt
2.使用JWT生成token
use Firebase\JWT\JWT;public function index() { $key = "huang"; //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当 于加密中常用的 盐 salt $token = [ "iss" => "", //签发者 可以为空 "aud" => "", //面象的用户,可以为空 "iat" => time(), //签发时间 "nbf" => time() + 100, //在什么时候jwt开始生效 (这里表示生成100秒后才生效) "exp" => time() + 7200, //token 过期时间 "uid" => 123 //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对 ]; $jwt = JWT::encode($token, $key, "HS256"); //根据参数生成了 token return json([ "token" => $jwt ]); }
3.验证token获取里面的信息
public function check(){ $jwt = input("token"); //上一步中返回给用户的token $key = "huang"; //上一个方法中的 $key 本应该配置在 config文件中的 $info = JWT::decode($jwt,$key,["HS256"]); //解密jwt return json($info); }
4.解析JWT
use \Firebase\JWT\JWT; //导入JWTclass MainController extends Controller{ public function verification() { $key = '344'; //key要和签发的时候一样 $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC93d3cuaGVsbG93ZWJhLm5ldCIsImF1ZCI6Imh0dHA6XC9cL3d3dy5oZWxsb3dlYmEubmV0IiwiaWF0IjoxNTI1MzQwMzE3LCJuYmYiOjE1MjUzNDAzMTcsImV4cCI6MTUyNTM0NzUxNywiZGF0YSI6eyJ1c2VyaWQiOjEsInVzZXJuYW1lIjoiXHU2NzRlXHU1YzBmXHU5Zjk5In19.Ukd7trwYMoQmahOAtvNynSA511mseA2ihejoZs7dxt0"; //签发的Token try { JWT::$leeway = 60;//当前时间减去60,把时间留点余地 $decoded = JWT::decode($jwt, $key, ['HS256']); //HS256方式,这里要和签发的时候对应 $arr = (array)$decoded; print_r($arr); } catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确 echo $e->getMessage(); }catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用 echo $e->getMessage(); }catch(\Firebase\JWT\ExpiredException $e) { // token过期 echo $e->getMessage(); }catch(Exception $e) { //其他错误 echo $e->getMessage(); } //Firebase定义了多个 throw new,我们可以捕获多个catch来定义问题,catch加入自己的业务,比如token过期可以用当前Token刷新一个新Token }}