🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
下载地址 ``` composer require firebase/php-jwt ``` ___ ``` <?php namespace app\index\controller; use \Firebase\JWT\JWT; class Jwts { private static $config = [ 'key'=>'thisisakey', 'iss' => 'http://free.cn', //签发者 可选 'aud' => 'http://free.cn', //接收该JWT的一方,可选 'exp' => 7200, //过期时间,这里设置2个小时 ]; /** * @param $user_id * @return string */ public static function getToken($user_id){ $time = time(); //当前时间 $token = [ 'iss' => self::$config['iss'], //签发者 可选 'aud' => self::$config['aud'], //接收该JWT的一方,可选 'iat' => $time, //签发时间 'nbf' => $time-1 , //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用 'exp' => $time+self::$config['exp'], //过期时间,这里设置2个小时 'data' => [ //自定义信息,不要定义敏感信息 'userid' =>$user_id, ] ]; return JWT::encode($token, self::$config['key']); //输出Token 默认'HS256' } /** * @param $token */ public static function verifyToken($token){ try { JWT::$leeway = 60;//当前时间减去60,把时间留点余地 $decoded = JWT::decode($token, self::$config['key'], ['HS256']); //HS256方式,这里要和签发的时候对应 return (array)$decoded; } catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确 return json(['code'=>403,'msg'=>'签名错误']); }catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用 return json(['code'=>401,'msg'=>'token失效']); }catch(\Firebase\JWT\ExpiredException $e) { // token过期 return json(['code'=>401,'msg'=>'token已过期']); }catch(Exception $e) { //其他错误 return json(['code'=>404,'msg'=>'非法请求']); }catch(\UnexpectedValueException $e) { //其他错误 return json(['code'=>404,'msg'=>'非法请求']); } catch(\DomainException $e) { //其他错误 return json(['code'=>404,'msg'=>'非法请求']); } } } ``` ``` ```