1.安装JWT

  1. composer require firebase/php-jwt

2.使用JWT生成token

  1. use Firebase\JWT\JWT;
  2. public function index()
  3. {
  4. $key = "huang"; //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当 于加密中常用的 盐 salt
  5. $token = [
  6. "iss" => "", //签发者 可以为空
  7. "aud" => "", //面象的用户,可以为空
  8. "iat" => time(), //签发时间
  9. "nbf" => time() + 100, //在什么时候jwt开始生效 (这里表示生成100秒后才生效)
  10. "exp" => time() + 7200, //token 过期时间
  11. "uid" => 123 //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
  12. ];
  13. $jwt = JWT::encode($token, $key, "HS256"); //根据参数生成了 token
  14. return json([
  15. "token" => $jwt
  16. ]);
  17. }

3.验证token获取里面的信息

  1. public function check(){
  2. $jwt = input("token"); //上一步中返回给用户的token
  3. $key = "huang"; //上一个方法中的 $key 本应该配置在 config文件中的
  4. $info = JWT::decode($jwt,$key,["HS256"]); //解密jwt
  5. return json($info);
  6. }

4.解析JWT

  1. use \Firebase\JWT\JWT; //导入JWT
  2. class MainController extends Controller
  3. {
  4. public function verification()
  5. {
  6. $key = '344'; //key要和签发的时候一样
  7. $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC93d3cuaGVsbG93ZWJhLm5ldCIsImF1ZCI6Imh0dHA6XC9cL3d3dy5oZWxsb3dlYmEubmV0IiwiaWF0IjoxNTI1MzQwMzE3LCJuYmYiOjE1MjUzNDAzMTcsImV4cCI6MTUyNTM0NzUxNywiZGF0YSI6eyJ1c2VyaWQiOjEsInVzZXJuYW1lIjoiXHU2NzRlXHU1YzBmXHU5Zjk5In19.Ukd7trwYMoQmahOAtvNynSA511mseA2ihejoZs7dxt0"; //签发的Token
  8. try {
  9. JWT::$leeway = 60;//当前时间减去60,把时间留点余地
  10. $decoded = JWT::decode($jwt, $key, ['HS256']); //HS256方式,这里要和签发的时候对应
  11. $arr = (array)$decoded;
  12. print_r($arr);
  13. } catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
  14. echo $e->getMessage();
  15. }catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
  16. echo $e->getMessage();
  17. }catch(\Firebase\JWT\ExpiredException $e) { // token过期
  18. echo $e->getMessage();
  19. }catch(Exception $e) { //其他错误
  20. echo $e->getMessage();
  21. }
  22. //Firebase定义了多个 throw new,我们可以捕获多个catch来定义问题,catch加入自己的业务,比如token过期可以用当前Token刷新一个新Token
  23. }
  24. }