lumen的CORS中间件

今天偶然写个demo使用一下lumen8,碰到跨域问题,处理一下

# app/Http/Middleware/CorsMiddleware.php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class CorsMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param Request $request
     * @param Closure $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $headers = [
            'Access-Control-Allow-Origin'       => '*',
            'Access-Control-Allow-Credentials'  => 'false',
            'Access-Control-Allow-Methods'      => 'GET,POST,OPTIONS,DELETE,PUT',
            'Access-Control-Allow-Headers'      => '*'
        ];
        if ($request->getMethod() == 'OPTIONS') return response('', 204, $headers);

        /** @var Response $response */
        $response = $next($request);
        $response->withHeaders($headers);
        return $response;
    }
}
# bootstrap/app.php
 $app->middleware([
     App\Http\Middleware\CorsMiddleware::class
 ]);

在safari中,需要响应200才行,不然预检会失败

if ($request->getMethod() == 'OPTIONS') return response('', 200, $headers);
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

在路由文件加入下面这个 解决

Route::options('/{all}', function (Request $request) {
    $origin = $request->header('ORIGIN', '*');
    header("Access-Control-Allow-Credentials: true");
    header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE');
    header('Access-Control-Allow-Headers: Origin, Access-Control-Request-Headers, SERVER_NAME, Access-Control-Allow-Headers, cache-control, token, X-Requested-With, Content-Type, Accept, Connection, User-Agent, Cookie');
})->where(['all' => '([a-zA-Z0-9-]|/)+']);
3年前 评论
soonio (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!