nk-lihaink-cn/app/api/BaseController.php

186 lines
5.3 KiB
PHP
Raw Normal View History

2021-07-28 10:04:47 +08:00
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
2021-11-24 17:17:29 +08:00
* @license https://opensource.org/licenses/Apache-2.0
2021-07-28 10:04:47 +08:00
* @link https://www.gougucms.com
*/
declare (strict_types = 1);
namespace app\api;
2023-01-18 17:10:33 +08:00
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
2021-07-28 10:04:47 +08:00
use think\App;
use think\exception\HttpResponseException;
2023-01-18 17:10:33 +08:00
use think\facade\Db;
2021-07-28 10:04:47 +08:00
use think\facade\Request;
use think\Response;
/**
* 控制器基础类
*/
abstract class BaseController
{
/**
* Request实例
* @var \think\Request
*/
protected $request;
/**
* 应用实例
* @var \think\App
*/
protected $app;
/**
* 是否批量验证
* @var bool
*/
protected $batchValidate = false;
/**
* 控制器中间件
* @var array
*/
protected $middleware = [];
/**
* 分页数量
* @var string
*/
protected $pageSize = '';
/**
* jwt配置
* @var string
*/
protected $jwt_conf = [
2023-01-18 17:10:33 +08:00
'secrect' => 'ae47e94a7dcd1fdfacb499b60e361a8d',
'iss' => '', //签发者 可选
'aud' => '', //接收该JWT的一方可选
'exptime' => '', //过期时间,这里设置2个小时
];
2021-07-28 10:04:47 +08:00
/**
* 构造方法
* @access public
* @param App $app 应用对象
*/
public function __construct(App $app)
{
$this->app = $app;
$this->request = $this->app->request;
$this->jwt_conf = get_system_config('token');
2021-07-28 10:04:47 +08:00
// 控制器初始化
$this->initialize();
}
// 初始化
protected function initialize()
{
2023-01-18 17:10:33 +08:00
2021-07-28 10:04:47 +08:00
//每页显示数据量
$this->pageSize = Request::param('page_size', \think\facade\Config::get('app.page_size'));
2023-01-18 17:10:33 +08:00
$token = Request::header('x-Token');
if ($token) {
if (strpos($token, 'Bearer') === 0){
$token = trim(substr($token, 6));
}
if (count(explode('.', $token)) != 3) {
return json(['code'=>404,'msg'=>'非法请求']);
}
$config = get_system_config('token');
//var_dump($config);exit;
try {
JWT::$leeway = 60;//当前时间减去60把时间留点余地
$decoded = JWT::decode($token, new Key('ae47e94a7dcd1fdfacb499b60e361a8d', 'HS256')); //HS256方式这里要和签发的时候对应
//return (array)$decoded;
// $decoded_array = json_decode(json_encode($decoded),TRUE);
// $jwt_data = $decoded_array['data'];
$user=Db::connect('shop')->name('nk_user')->where('user_id',$decoded->jti[0])->find();
if (!$user){
return json(['code'=>403,'msg'=>'签名错误']);
return false;
}
$user = Db::table('fa_user')->where('id',$user['n_user_id'])->find();
//$request->uid = $jwt_data['userid'];
define('JWT_UID', $user['id']);
// $response = $next($request);
// return $response;
//return $next($request);
} 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'=>'非法请求']);
}
}else{
define('JWT_UID', '');
}
2021-07-28 10:04:47 +08:00
}
/**
* Api处理成功结果返回方法
* @param $message
* @param null $redirect
* @param null $extra
* @return mixed
* @throws ReturnException
*/
protected function apiSuccess($msg = 'success',$data=[])
{
2023-01-18 17:10:33 +08:00
return $this->apiReturn($data, 1, $msg);
2021-07-28 10:04:47 +08:00
}
/**
* Api处理结果失败返回方法
* @param $error_code
* @param $message
* @param null $redirect
* @param null $extra
* @return mixed
* @throws ReturnException
*/
2023-01-18 17:10:33 +08:00
protected function apiError($msg = 'fail',$data=[], $code = 0)
2021-07-28 10:04:47 +08:00
{
return $this->apiReturn($data, $code, $msg);
}
/**
* 返回封装后的API数据到客户端
* @param mixed $data 要返回的数据
* @param integer $code 返回的code
* @param mixed $msg 提示信息
* @param string $type 返回数据格式
* @param array $header 发送的Header信息
* @return Response
*/
protected function apiReturn($data, int $code = 0, $msg = '', string $type = '', array $header = []): Response
{
$result = [
'code' => $code,
'msg' => $msg,
'time' => time(),
'data' => $data,
];
$type = $type ?: 'json';
$response = Response::create($result, $type)->header($header);
throw new HttpResponseException($response);
}
}