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

跨域請求不經過應用插件的中間件

sudden3

已解決

感謝老大,原因為注冊options路由的Route::options('[{path:.+}]', function () {});寫法為匿名函數,而webman判斷路由是否為屬于應用插件是由命名空間判斷的,匿名函數沒有這些東西 所以就沒有走應用插件的中間件.

問題描述

應用插件中配置了中間件處理跨域請求,發(fā)現請求沒有經過中間件。

這里粘代碼

應用插件中的config/middleware.php截圖
截圖
中間件代碼截圖
截圖
應用插件中route.php代碼截圖
截圖

報錯信息

發(fā)送請求后:
options請求沒報錯 但是響應頭不全,控制臺只輸出了"option router"未輸出"corsMiddleware"
截圖

post請求報錯 控制臺無任何輸出
截圖

程序代碼

--

操作系統及workerman/webman等框架組件具體版本

這里寫具體的系統環(huán)境相關信息

1413 3 0
3個回答

sudden3

截圖

  • 暫無評論
sudden3

更新一下 我繼續(xù)調試的過程

我給中間件加了一個構造函數參數 如圖:
截圖
然后再在config/middleware.php/應用插件目錄/config/middleware.php分別都引入了這個中間件并傳入不同的參數:

[
    '' => [
      new \plugin\RainAdmin\app\middleware\CorsMiddleware("項目中間件") // 或'應用插件中間件'
    ]
]

請求的目標控制器方法(控制器存在于應用插件內):

public function login(Request $request) {
    return json(["data" => 123]);
}

發(fā)起請求后發(fā)現瀏覽器中請求成功返回了結果,控制臺的輸出為:

項目中間件----OPTIONS---- Before 
項目中間件----OPTIONS---- After 
應用插件中間件----POST---- Before 
應用插件中間件----POST---- After 

預檢請求在項目中間件中直接被返回了(代碼邏輯控制的我能理解),但是為什么POST請求沒有經過項目中間件...


我又再次測試,將項目/config/middleware.php中引入的中間件注釋掉,發(fā)現POST直接請求不通了,控制欄中輸出為空 但是OPTIONS請求依然可以請求通(這就是開貼時的情況)。


我再次測試 將注釋的中間件恢復,把控制器中的方法改寫為了:

public function login(Request $request) {
    throw new BusinessException("test");
}

結果請求又不通了,瀏覽器報CORS錯誤,控制臺輸出為:

項目中間件----OPTIONS---- Before 
項目中間件----OPTIONS---- After 
應用插件中間件----POST---- Before 
應用插件中間件----POST---- After

我將應用插件內的middleware.php中引入中間件的代碼注釋后請求又正常了。

控制臺中輸出

項目中間件----OPTIONS---- Before 
項目中間件----OPTIONS---- After 

注:我在應用插件內exception.php指定了異常處理類并在response中加入了中間件中同樣的響應頭
截圖

  • 暫無評論
walkor 打賞

精簡一個能重現問題的項目,zip打包發(fā)到我郵箱 walkor@workerman.net

年代過于久遠,無法發(fā)表回答
??