webman 如果在中间件中抛出异常就会产生跨域错误,项目中,我的所有错误响应都是以异常的方式返回的,在身份验证中间件中,如果token验证失败,我就会抛出异常,此时APP端就会报跨域错误
检查身份之前加个处理跨域option的操作
增加了啊 路由文件 Route::options('[{path:.+}]', function (){ return response(''); }); 跨域中间件也加了这个$response = $request->method() == 'OPTIONS' ? response('') : $next($request);
把跨域中间件放在报异常的中间件前面就好了,也就是让跨域中间件优先执行
异常不是一个中间件怎么放到跨域前面呢。我目前是在中间件里try catch return json()这样解决的。
中间件有执行顺序,把跨域中间件放在所有中间件前面,让跨域中间件最先执行。不然你在其它中间件直接抛出异常了,都没执行到跨域中间件,那肯定报跨域错误啊。
我也是同样的问题,
return [ '' => [ middleware\AllowCrossDomain::class, middleware\BaseConfig::class, middleware\ActionHook::class, ] ];
中间件最先执行的就是跨域中间件,但只要抛出异常还是跨域
跨域的问题不好解决,其实最好的办法是在入口文件里直接返回跨域判断,因为如果是跨域请求option,那么就不应该进入后续操作,因为它只是判断是不是有权限访问。给它返回就行了。让真实的请求能正常进入服务就OK。
检查身份之前加个处理跨域option的操作
增加了啊
路由文件
Route::options('[{path:.+}]', function (){
return response('');
});
跨域中间件也加了这个$response = $request->method() == 'OPTIONS' ? response('') : $next($request);
把跨域中间件放在报异常的中间件前面就好了,也就是让跨域中间件优先执行
异常不是一个中间件怎么放到跨域前面呢。我目前是在中间件里try catch return json()这样解决的。
中间件有执行顺序,把跨域中间件放在所有中间件前面,让跨域中间件最先执行。不然你在其它中间件直接抛出异常了,都没执行到跨域中间件,那肯定报跨域错误啊。
我也是同样的问题,
中间件最先执行的就是跨域中间件,但只要抛出异常还是跨域
跨域的问题不好解决,其实最好的办法是在入口文件里直接返回跨域判断,因为如果是跨域请求option,那么就不应该进入后续操作,因为它只是判断是不是有权限访问。给它返回就行了。让真实的请求能正常进入服务就OK。