企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## **安装jwt扩展** ```bash $ composer require firebase/php-jwt ``` ## 引入命名空间 ```php use Firebase\JWT\BeforeValidException; use Firebase\JWT\ExpiredException; use Firebase\JWT\JWT; use Firebase\JWT\SignatureInvalidException; ``` ## 注册Token方法 ``` /** * 生成token * @param $uid * @return mixed * */ function signToken($uid) { $key = 'todo.im'; // 盐 salt $token = array( "iss" => $key, // 签发者 可以为空 "aud" => '', // 面象的用户,可以为空 "iat" => time(), // 签发时间 "nbf" => time(), // 在什么时候jwt开始生效 "exp" => time() + 2000, // token 过期时间 "data" => [ 'uid' => $uid, ] ); $jwt = JWT::encode($token, $key, "HS256"); return $jwt; } ``` ## 验证token方法 ``` /** * 验证token * @param $token * @return int[] */ function checkToken($token) { $key = 'todo.im'; $status = array("code" => 2); try { JWT::$leeway = 60;//当前时间减去60,把时间留点余地 $decoded = JWT::decode($token, $key, array('HS256')); //HS256方式,这里要和签发的时候对应 $arr = (array)$decoded; $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; } } ``` ## 使用 ```php $user['token'] = signToken($user['id']); ``` 验证 token ,这里的token一般用 header 方式传送,接收后直接调用 直接调用 common.php 文件的 checkToken方法即可。验证成功返回加密的token信息。验证失败返回提示信息。 ~~~php $token = Request::instance()->header('token');$res = checkToken($token); ~~~