composer require firebase/php-jwt

// 应用公共文件use Firebase\JWT\JWT;use Firebase\JWT\Key;use Firebase\JWT\SignatureInvalidException;use Firebase\JWT\ExpiredException;use Firebase\JWT\BeforeValidException;
/*** 生成token* $uid 输入用户openid&&id*/if(!function_exists('signToken')){// 生成验签function signToken($uid){$key = '!@#$%*&'; //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当 于加密中常用的 盐 salt$token = array("iss" => '', //签发者 可以为空"aud" => '', //面象的用户,可以为空"iat" => time(), //签发时间"nbf" => time() + 60, //在什么时候jwt开始生效 (这里表示生成60秒后才生效)"exp" => time() + 120, //token 过期时间 (这里表示过期时间为120秒)'data' => $uid //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对);$jwt = JWT::encode($token, $key, "HS256"); //根据参数生成了 tokenreturn $jwt;}}
/*** 验证token* $token 生成的token值*/if(!function_exists('checkToken')){// 验证tokenfunction checkToken($token){$key = '!@#$%*&';$status = array("code"=>2);try {// JWT::$leeway = 60; //当前时间减去60,把时间留点余地JWT::$leeway = 0;$decode = JWT::decode($token,new Key($key,'HS256')); //HS256方式,这里要和签发的时候对应$arr = (array)$decode;$res['code'] = 1;$res['data'] = $arr['data'];return $res;} catch (SignatureInvalidException $e) { //签名不正确$status['msg'] = "签名不正确";return $status;} catch (BeforeValidException $e) { // 签名在某个时间点之后才能用$status['msg'] = "token未生效";return $status;} catch (ExpiredException $e) { // token过期$status['msg'] = "token失效";return $status;} catch (Exception $e) { //其他错误$status['msg'] = "未知错误";return $status;}}}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号