course/app/middleware/ApiAuthCheckMiddleware.php

73 lines
2.3 KiB
PHP
Raw Normal View History

<?php
namespace app\middleware;
use app\common\model\AdminUserModel;
use app\common\model\MchTerminalModel;
use app\common\model\Teacher;
use app\constant\ResponseCode;
use ReflectionClass;
use think\Exception;
use think\model\Collection;
use Tinywan\Jwt\Exception\JwtCacheTokenException;
use Tinywan\Jwt\Exception\JwtTokenException;
use Tinywan\Jwt\Exception\JwtTokenExpiredException;
use Tinywan\Jwt\JwtToken;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
class ApiAuthCheckMiddleware implements MiddlewareInterface
{
public function process(Request $request, callable $handler): Response
{
$request->user = new \stdClass();
$request->teacher = new \stdClass();
$request->partents = new \stdClass();
// 通过反射获取控制器哪些方法不需要登录和鉴权
$controller = new ReflectionClass($request->controller);
$noNeedLogin = $controller->getDefaultProperties()['noNeedLogin'] ?? [];
// $res = JwtToken::getExtend();
$is_need_login = 0;
$msg = '';
try {
$extend = JwtToken::getExtend();
if ($extend['role'] == 'student') {
} elseif ($extend['role'] == 'teacher') {
$request->teacher = \support\Db::table('teacher')
->where('id', $extend['id'])
->select('id','account','teacher_name','openid','time_zone_name','time_zone_abbr','time_zone_offset')
->first();
} elseif ($extend['role'] == 'parents') {
}
// $request->user = JwtToken::getUser();
} catch (JwtTokenExpiredException $e) {
$is_need_login = 1;
$msg = $e->getMessage();
} catch (JwtTokenException $e) {
$is_need_login = 1;
$msg = $e->getMessage();
} catch (JwtCacheTokenException $e) {
$is_need_login = 1;
$msg = $e->getMessage();
}
// 访问的方法需要登录
if (!in_array($request->action, $noNeedLogin) && !in_array('*', $noNeedLogin) && $is_need_login) {
return json([
'code' => ResponseCode::NEED_LOGIN,
'msg' => $msg,
]);
}
return $handler($request);
}
}