TP8创建自定义跨域中间件Cors,允许指定域名请求

ThinkPHP 16 0 2025-11-20

TP8创建自定义跨域中间件Cors,允许指定域名请求

一、在app目录下新建middleware目录,再建Cors.php文件,内容如下:

<?php
// app/middleware/Cors.php

declare(strict_types=1);

namespace app\middleware;

class Cors
{
    /**
     * 处理请求
     * @param \think\Request $request
     * @param \Closure $next
     * @return \think\Response
     */
    public function handle($request, \Closure $next)
    {
        // 设置跨域头
        $origin = $request->header('origin', '');

        header('Access-Control-Allow-Origin: ' . $this->getAllowOrigin($origin));
        header('Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS');
        header('Access-Control-Allow-Headers: Authorization,Content-Type,X-Requested-With,X-Token,Accept');
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Max-Age: 86400');

        // 如果是预检请求,直接返回
        if ($request->method() === 'OPTIONS') {
            return response()->code(200);
        }

        return $next($request);
    }

    /**
     * 获取允许的源
     * @param string $origin
     * @return string
     */
    protected function getAllowOrigin(string $origin): string
    {
        $allowOrigins = [
            'http://localhost:8080',
            'http://localhost:3000',
            'https://yourdomain.com'
        ];

        if (in_array($origin, $allowOrigins)) {
            return $origin;
        }

        // 生产环境建议返回具体的域名,而不是 *
        return config('app.debug') ? $origin : $allowOrigins[0] ?? '*';
    }
}


二、在全局中间件配置app/middleware.php里添加以下代码“\app\middleware\Cors::class”,,如下图所示:

上一篇:TP6连接SQLite数据库及常用字段数据类型

下一篇:没有了

讨论数量:0

请先登录再发表讨论。 2025-11-21

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链