AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
> 1.进行JWT的安装操作 composer require lcobucci/jwt 3.3 > 2.建立目录,并进行封装JWT ~~~ namespace app\demo\extend\tools\jwt; use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\Builder; use Lcobucci\JWT\Parser; use Lcobucci\JWT\ValidationData; class Token { private static $_config = [ 'audience' => 'http://www.pyg.com',//接收人 'id' => '3f2g57a92aa',//token的唯一标识,这里只是一个简单示例 'sign' => 'pinyougou',//签名密钥 'issuer' => 'http://adminapi.pyg.com',//签发人 'expire' => 3600*24 //有效期 ]; //生成token public static function getToken($user_id){ //签名对象 $signer = new Sha256(); //获取当前时间戳 $time = time(); //设置签发人、接收人、唯一标识、签发时间、立即生效、过期时间、用户id、签名 $token = (new Builder())->issuedBy(self::$_config['issuer']) ->canOnlyBeUsedBy(self::$_config['audience']) ->identifiedBy(self::$_config['id'], true) ->issuedAt($time) ->canOnlyBeUsedAfter($time-1) ->expiresAt($time + self::$_config['expire']) ->with('user_id', $user_id) ->sign($signer, self::$_config['sign']) ->getToken(); return (string)$token; } //从请求信息中获取token令牌 public static function getRequestToken() { if (empty($_SERVER['HTTP_AUTHORIZATION'])) { return false; } $header = $_SERVER['HTTP_AUTHORIZATION']; $method = 'bearer'; //去除token中可能存在的bearer标识 return trim(str_ireplace($method, '', $header)); } //从token中获取用户id (包含token的校验) public static function getUserId($token = null) { $user_id = null; $token = empty($token)?self::getRequestToken():$token; if (!empty($token)) { //为了注销token 加以下if判断代码 $delete_token = cache('delete_token') ?: []; if(in_array($token, $delete_token)){ //token已被删除(注销) return $user_id; } $token = (new Parser())->parse((string) $token); //验证token $data = new ValidationData(); $data->setIssuer(self::$_config['issuer']);//验证的签发人 $data->setAudience(self::$_config['audience']);//验证的接收人 $data->setId(self::$_config['id']);//验证token标识 if (!$token->validate($data)) { //token验证失败 return $user_id; } //验证签名 $signer = new Sha256(); if (!$token->verify($signer, self::$_config['sign'])) { //签名验证失败 return $user_id; } //从token中获取用户id $user_id = $token->getClaim('user_id'); } return $user_id; } } ~~~ 3.建立中间件,进行验证操作 ~~~ public $arr = ['login']; public function handle($request, \Closure $next) { if (!in_array($request->pathinfo(),$this->arr)) { $token = JWT::getRequestToken(); if(empty($token)) { return success('token值为空'); }else{ try { $openid = JWT::getUserId($token); if(!$openid) { return success('token有误'); } }catch (\Exception $e) { return success('失败'); } } } return $next($request); } ~~~ 4.获取到头部信息 ~~~ <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/?s=$1 [QSA,PT,L] #增加下面这项 SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 </IfModule> ~~~