class UserAuthCheck implements MiddlewareInterface
{
protected $controllerScope = [
'app\controller\calltask',
];
protected $actionWhiteList = [
];
public function process(Request $request, callable $handler): Response
{
$controller = strtolower($request->controller);
$action = strtolower($request->action);
$path = "{$controller}/{$action}"; // 完整的控制器/方法字符串
$response = $handler($request); // 正常情況下繼續(xù)響應(yīng)后續(xù)請(qǐng)求
// 白名單方法的請(qǐng)求不攔截
if (in_array($path, $this->actionWhiteList)) {
return $response;
}
// 只攔截指定控制器的請(qǐng)求
if (in_array($controller, $this->controllerScope)) {
$res = \app\bootstrap\ReturnCode::$entity->setCode(RETURNCODE_NOT_LOGED);
$token = $request->header('Authorization');
if (!$token) {
var_dump('token不存在');
return json($res);
}
$tokenKey = rediskey_user_token($token);
$tokenData = \support\Redis::hGetAll($tokenKey);
if (!$tokenData || empty($tokenData)) {
var_dump('token內(nèi)容無(wú)效');
return json($res);
}
}
var_dump('繼續(xù)后續(xù)操作');
return $response;
}
}
中間件文件:app\middleware\UserAuthCheck.php
在控制器CallTask.php中試著做一個(gè)status方法:
public function status(Request $request)
{
var_dump('執(zhí)行到這里了');
$taskId = $request->input('task_id');
$callTaskService = new \app\service\CallTask();
$res = $callTaskService->status($taskId);
return json($res);
}
在config\middleware.php中也做了對(duì)應(yīng)了配置,試著不在header中傳Authorization請(qǐng)求一個(gè)calltask中的方法,結(jié)果卻意外發(fā)現(xiàn),先執(zhí)行一遍控制器中的方法,然后再執(zhí)行的中間件中的方法。
這不是期待的結(jié)果,雖然查詢類(lèi)的接口可以改造返回值,但是如果是執(zhí)行類(lèi)的接口,那豈不是在攔截時(shí)就已經(jīng)執(zhí)行了。
不知道是我在哪里寫(xiě)錯(cuò)了嗎?
默認(rèn)路由關(guān)了就行吧。
如果你想關(guān)閉默認(rèn)路由,在配置文件 config/route.php里最后一行加上如下配置:
Route::disableDefaultRoute();