$uname,'delete_time'=>0])->find(); // 异常处理 if(!isset($drs)){ throwError('用户不存在'); return -1; }else{ $fpass = password($pass.$drs['salt']); // 对比密码 if($drs['password'] != $fpass){ throwError('密码错误'); return false; } // 返回用户信息 return $drs; } return false; } /** * @param array $arr * @return bool */ public function register(array $arr){ $salt = makeSalt(6); // 密码加密 $arr['password'] = password($arr['password'].$salt); // 生成salt $arr['salt'] = $salt; $dtime =time(); $arr['create_time'] = $dtime; $arr['update_time'] = $dtime; // 保存 $model = new User; $uid = $model->save($arr); return isset($uid)?true:false; } /** * 根据uid,nick_name 换取JWT * @param int $userId * @param string $uname * @return string * @throws \Exception */ public function getToken(int $userId,string $uname): string { static $token = ''; if (empty($token)) { $token = $this->makeToken($userId,$uname); } return $token; } /** * 生成JWT * @param int $userId * @param string $uname * @return string * @throws \Exception */ private function makeToken(int $userId,string $uname): string { $signer = new Sha256(); $key = InMemory::plainText(config('jwt.secret')); // $config = Configuration::forSymmetricSigner($signer,$key); $now = new DateTimeImmutable(); // 当前时间 // $token = $config->builder() // 签发人 ->issuedBy('https://douyin.xingtongworld.com/') // 受众 ->permittedFor('https://douyin.xingtongworld.com/') // JWT ID 编号 唯一标识 ->identifiedBy($userId) // 签发时间 ->issuedAt($now) // 在1分钟后才可使用 // ->canOnlyBeUsedAfter($now->modify('+1 minute')) // 过期时间1小时 ->expiresAt($now->modify('+1 hour')) // 自定义uid 额外参数 ->withClaim('uid', $userId) ->withClaim('name',$uname) // 自定义header 参数 // ->withHeader('foo', 'bar') // 生成token ->getToken($config->signer(), $config->signingKey()); return $token->toString(); } }