0x01
在 ./app/middleware.php 文件中启用内置中间件
\think\middleware\AllowCrossDomain::class
<?php
// 全局中间件定义文件
return [
// 全局请求缓存
// \think\middleware\CheckRequestCache::class,
// 多语言加载
// \think\middleware\LoadLangPack::class,
// Session初始化
// \think\middleware\SessionInit::class
// 注册中间件
// \app\middleware\Check::class
// 跨域
\think\middleware\AllowCrossDomain::class
];
0x02
*跨域请求值得注意的地方,如果你使用tp6官方跨域请求支持中间件的话
use think\middleware\AllowCrossDomain;
那么你可能需要在以下文件
vendor/topthink/framework/src/think/middleware/AllowCrossDomain.php
以下参数中补充你的请求头参数
例如你的请求头令牌名称为 XXX-TOKEN 那么你需要由
'Access-Control-Allow-Headers' => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With',
修改为
'Access-Control-Allow-Headers' => 'Token, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With',
protected $header = [
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Max-Age' => 1800,
'Access-Control-Allow-Methods' => 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers' => 'Token,Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With',
];
这个玩意 Access-Control-Allow-Headers 的官方解释是这样的"它表明,除了CORS安全清单列出的请求标头外,对服务器的CORS请求还支持名为X-Custom-Header的自定义标头"。
意思是说,如果你不是直接发送请求,请求头携带了 Token 但是没放在它允许的请求头范围内,那么就判断发送的请求是跨域的,有时候并不是这个中间件 AllowCrossDomain 背锅。