Jwttoken.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace app\common\model;
  3. use Firebase\JWT\JWT;
  4. use Firebase\JWT\Key;
  5. class Jwttoken
  6. {
  7. //生成token
  8. public function createJwt($username)
  9. {
  10. $key = md5('key'); //jwt的签发密钥,验证token的时候需要用到
  11. $time = time();
  12. $expire = $time + 14400; //过期时间
  13. $token = array(
  14. "username" => $username,
  15. "iss" => "",//签发组织
  16. "aud" => "", //签发作者
  17. "iat" => $time, //签发时间
  18. "nbf" => $time, //生效时间
  19. "exp" => $expire
  20. );
  21. $jwt = JWT::encode($token, $key, 'HS256');
  22. return $jwt;
  23. }
  24. //校验jwt权限API
  25. public function verifyJwt($jwt)
  26. {
  27. $key = 'A6H1O#vJ*6QV3*sC';
  28. try {
  29. $jwtAuth = JWT::decode($jwt, new Key($key, 'HS256'));
  30. $authInfo = (array)$jwtAuth;
  31. $msg['status']=0;
  32. $msg['info']=$authInfo;
  33. return $msg;
  34. } catch (\Firebase\JWT\SignatureInvalidException $e) {
  35. return [
  36. 'status' => 10002,
  37. 'msg' => 'Token无效'
  38. ];
  39. exit;
  40. } catch (\UnexpectedValueException $e) {
  41. return [
  42. 'status' => 10005,
  43. 'msg' => $e->getMessage()
  44. ];
  45. exit;
  46. } catch (\DomainException $e) {
  47. return [
  48. 'status' => 10006,
  49. 'msg' => $e->getMessage()
  50. ];
  51. exit;
  52. } catch (\InvalidArgumentException $e) {
  53. return [
  54. 'status' => 10007,
  55. 'msg' => $e->getMessage()
  56. ];
  57. exit;
  58. } catch (\Firebase\JWT\ExpiredException $e) {
  59. //Token过期
  60. return [
  61. 'status' => 10003,
  62. 'msg' => '登录信息已超时,请重新登录'
  63. ];
  64. exit;
  65. } catch (Exception $e) {
  66. return [
  67. 'status' => 10004,
  68. 'msg' => '未知错误'
  69. ];
  70. exit;
  71. }
  72. }
  73. }