You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
5.1 KiB
134 lines
5.1 KiB
<?php
|
|
declare (strict_types=1);
|
|
|
|
namespace app\middleware;
|
|
|
|
use jwt\Jwt;
|
|
|
|
class CheckApi
|
|
{
|
|
/**
|
|
* 处理请求
|
|
* @param \think\Request $request
|
|
* @param \Closure $next
|
|
* @param string $name auth--必须有openid user--必须有user_id
|
|
* @date 2021-01-13
|
|
*/
|
|
public function handle($request, \Closure $next, $name = 'auth')
|
|
{
|
|
$header = $request->header();
|
|
$access_token = isset($header['access-token']) ? $header['access-token'] : (isset($header['access_token']) ? $header['access_token'] : '');
|
|
$user_agent = isset($header['code-agent']) ? $header['code-agent'] : (isset($header['code_agent']) ? $header['code_agent'] : '');
|
|
$uid = isset($header['uid']) ? $header['uid'] : ''; //TODO
|
|
|
|
$JWT = new Jwt();
|
|
|
|
//定义用户代理商和UID
|
|
defined('ACCESS_TOKEN') || define('ACCESS_TOKEN', $access_token);
|
|
defined('USER_AGENT') || define('USER_AGENT', $user_agent);
|
|
defined('UID') || define('UID', $uid);
|
|
|
|
//鉴权由大面到细节
|
|
if (!UID) {
|
|
return sendErrorMessage(1006, 'uid缺失');
|
|
}
|
|
|
|
//解析token
|
|
if ($access_token) {
|
|
$res = $JWT->checkToken($access_token);
|
|
if ($res['code'] != 0) {
|
|
return sendErrorMessage(1002, 'token失效');
|
|
}
|
|
|
|
defined('TOKEN') || define('TOKEN', $res['data']); //ACCESS_TOKEN全部数据
|
|
$data = $res['data']['data'] ?? null; //获取解密数据
|
|
defined('TOKEN_DATA') || define('TOKEN_DATA', $data); //ACCESS_TOKEN的DATA数据
|
|
|
|
// access_token必须验证
|
|
if (!$access_token) {
|
|
return sendErrorMessage(1001, 'token缺失');
|
|
}
|
|
|
|
if ($data['uid'] != $uid) {
|
|
return sendErrorMessage(1003, 'uid与token不符');
|
|
}
|
|
}
|
|
|
|
|
|
//授权或者登录验证
|
|
if ($name == 'auth' || $name == 'user') {
|
|
switch (USER_AGENT) {
|
|
// APP
|
|
case 'app':
|
|
if (empty($data['device_id'])) {
|
|
return sendErrorMessage(1004, '尚未授权给APP');
|
|
}
|
|
defined('DEVICE_ID') || define('DEVICE_ID', $data['device_id']);
|
|
defined('APP_USER_ID') || define('APP_USER_ID', $data['app_user_id']);
|
|
break;
|
|
|
|
// 微信公众号
|
|
case 'weixin':
|
|
if (empty($data['openid']) || empty($data['wechat_user_id'])) {
|
|
return sendErrorMessage(1004, '尚未授权给公众号');
|
|
}
|
|
defined('OPENID') || define('OPENID', $data['openid']);
|
|
defined('WECHAT_USER_ID') || define('WECHAT_USER_ID', $data['wechat_user_id']);
|
|
break;
|
|
|
|
// 微信小程序
|
|
case 'mp_weixin':
|
|
if (empty($data['openid']) || empty($data['mpweixin_user_id'])) {
|
|
return sendErrorMessage(1004, '尚未授权给小程序');
|
|
}
|
|
defined('OPENID') || define('OPENID', $data['openid']);
|
|
defined('MPWEIXIN_USER_ID') || define('MPWEIXIN_USER_ID', $data['mpweixin_user_id']);
|
|
break;
|
|
|
|
// 抖音小程序
|
|
case 'mp_toutiao':
|
|
if (empty($data['openid']) || empty($data['mp_toutiao_user_id'])) {
|
|
return sendErrorMessage(1004, '尚未授权给小程序');
|
|
}
|
|
defined('OPENID') || define('OPENID', $data['openid']);
|
|
defined('MP_TOUTIAO_USER_ID') || define('MP_TOUTIAO_USER_ID', $data['mp_toutiao_user_id']);
|
|
break;
|
|
|
|
// QQ小程序
|
|
case 'mp_qq':
|
|
if (empty($data['openid']) || empty($data['mpqq_user_id'])) {
|
|
return sendErrorMessage(1004, '尚未授权给小程序');
|
|
}
|
|
defined('OPENID') || define('OPENID', $data['openid']);
|
|
defined('MPQQ_USER_ID') || define('MPQQ_USER_ID', $data['mpqq_user_id']);
|
|
break;
|
|
|
|
// 支付宝小程序
|
|
case 'mp_alipay':
|
|
if (empty($data['openid']) || empty($data['mpalipay_user_id'])) {
|
|
return sendErrorMessage(1004, '尚未授权给小程序');
|
|
}
|
|
defined('OPENID') || define('OPENID', $data['openid']);
|
|
defined('MPALIPAY_USER_ID') || define('MPALIPAY_USER_ID', $data['mpalipay_user_id']);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
//登录验证
|
|
// if ($name == 'user') {
|
|
// if (empty($data['user_id'])) {
|
|
// return sendErrorMessage(1005, '尚未登录');
|
|
// }
|
|
// }
|
|
|
|
//定义USER_ID
|
|
defined('USER_ID') || define('USER_ID', $access_token ? $data['user_id'] : '');
|
|
|
|
$response = $next($request);
|
|
return $response;
|
|
}
|
|
}
|