解决hyperf项目跨域问题

雨中笑 php 811热度

简介跨域问题

在中间件中解决

<?php
/**
* CorsMiddleware.php
*
* User: Jialong.fan
* Date: 2021/01/05
* Email: <1171843306@qq.com>
*/

declare(strict_types = 1);

namespace App\Middleware;

use Hyperf\Utils\Context;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

/**
* Class MobileReportCorsMiddleware
*
* @package App\Middleware
*/
class MobileReportCorsMiddleware implements MiddlewareInterface
{
/**
* 跨域白名单
*
* @var string[]
*/
protected $corsOrigins = [
'http://yzx-fjl.com',
'https://baidu.com',
];

/**
* @inheritDoc
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$response = Context::get(ResponseInterface::class);

$origin = $request->hasHeader('origin') ? $request->getHeader('origin') : '';
if (config('debug') || in_array($origin, $this->corsOrigins)) {
$response = $response->withHeader('Access-Control-Allow-Origin', $origin)
->withHeader('Access-Control-Allow-Credentials', 'true')
->withHeader('Access-Control-Allow-Headers', 'DNT,Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization');
}

Context::set(ResponseInterface::class, $response);

if ($request->getMethod() == 'OPTIONS') return $response;

return $handler->handle($request);
}
}


很赞哦!(2)

本文阅读量 3055发布于 2021年1月8日

您的访问IP 3.145.97.248最早于 2024年4月29日 7时33分24秒 阅读过本文 为本文提供了 1 热度 1 阅读量

文章评论
回帖