TP6 中间件开启跨域 token

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 背锅。

猜你喜欢

转载自blog.csdn.net/qq_43929048/article/details/123705143