国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

雖然webman中間件生效了,但是controller中的方法還是執(zhí)行了

cqqjj1029
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ò)了嗎?

1436 2 0
2個(gè)回答

cqqjj1029

就在我發(fā)了提問(wèn)之后,忽然想到了答案:
在中間件中把$response = $handler($request)一行刪掉,在最后和白名單里都寫(xiě)成return $handler($request),然后就沒(méi)有問(wèn)題了,所以我想,當(dāng)程序執(zhí)行到$response = $handler($request)這句時(shí),對(duì)應(yīng)被請(qǐng)求的控制器代碼就已經(jīng)被執(zhí)行了。

  • tegic 2022-06-17

    你這樣想是對(duì)的

ersic

默認(rèn)路由關(guān)了就行吧。

如果你想關(guān)閉默認(rèn)路由,在配置文件 config/route.php里最后一行加上如下配置:

Route::disableDefaultRoute();
  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??