【问题标题】:Using Symfony as a backend and getting CORS error使用 Symfony 作为后端并得到 CORS 错误
【发布时间】:2021-03-23 15:21:26
【问题描述】:

我从我的 React 前端向我的 Symfony 后端发送一个请求。(以前它在纯 PHP 后端上运行良好)。

useEffect(() => {
              axios.get('http://localhost:8080/real_estate_refactored_backend/main').then((response) => {
                console.log(response);
            })
            .catch((error) => {
                console.log(error.message);
            });
  });

URL 中主要是我的 Symfony 控制器的路由

<?php

namespace App\Controller;

use App\Entity\Estates;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class MainController extends AbstractController
{
    /**
     * @Route("/main", name="main")
     */
    public function index(): Response
    {
        $entityManager = $this->getDoctrine()->getManager();
        $estates = $entityManager->getRepository(Estates::class)->findAll();

        $response = new Response();
   

    $response->setContent(json_encode([
        'estates' => uniqid(),
    ]));

    $response->headers->set('Content-Type', 'application/json');
  
    $response->headers->set('Access-Control-Allow-Origin', '*');
    return new Response($response);
    }
}

在 Symfony 中,与数据库的连接很好。

尽管我已经在 Symfony 中安装了 Nelmino CORS 包,并在

nelmino_cors.yaml

nelmio_cors:
    defaults:
        origin_regex: true
        allow_origin: ['*']
        allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
        allow_headers: ['*']
        expose_headers: ['Link']
        max_age: 3600
    paths:
        '^/': null

我仍然收到以下错误消息

我能做什么?

【问题讨论】:

  • 您好,您可以尝试将路径(在 nelmio_cors.yaml 中)更改为:'^/': ~ 吗?
  • 并擦除其他内容?是的,我做了同样的结果。
  • 您是否尝试清除缓存?正如这里提到的:stackoverflow.com/a/54572925/1750964
  • 是的,我试过了,但没有任何改变。

标签: php reactjs symfony cors-anywhere


【解决方案1】:

您需要将此代码添加到 .env

###> nelmio/cors-bundle ###
CORS_ALLOW_ORIGIN=^.*$
###< nelmio/cors-bundle ###

【讨论】:

    【解决方案2】:

    假设您已将 Symfony(安全)配置为使用会话 cookie 进行身份验证,请将 allow_credentials: true 添加到 nelmio_cors.yaml,并将 withCredentials: true 添加到 axios 配置对象:

    config/packages/nelmio_cors.yaml

    nelmio_cors:
        defaults:
            allow_credentials: true
            # Your existing configuration...
    

    你的 axios sn-p

    axios.get('/foo', { withCredentials: true });
    

    【讨论】:

    • 你能告诉我我必须去哪里使用 cookie 进行此配置吗?
    • 我的意思是我假设你已经将 symfony 的security.yaml 配置为使用基于会话/cookie 身份验证的防火墙。如果是这种情况,您无需对该配置执行任何操作。只需应用我在nelmio_cors.yaml 和您的axios 实例配置中提供的示例(同时保持与原始帖子中的所有内容相同)。这允许您的前端和后端共享会话/cookie,尽管它们托管在不同的来源。
    猜你喜欢
    • 2019-08-05
    • 2022-01-08
    • 1970-01-01
    • 2020-05-27
    • 2020-10-09
    • 2019-07-13
    • 2019-06-26
    • 2016-11-15
    • 2022-01-14
    相关资源
    最近更新 更多