You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo云实例CORS跨域问题求助(无需Nginx配置方案)

Odoo云实例跨域CORS问题求助(无需Nginx配置的解决方案)

问题现象

前端应用运行在http://localhost:3000,调用Odoo云实例(https://<my-instance>.odoo.com)API时触发CORS错误,控制台报错如下:

Access to XMLHttpRequest at 'https://<my-instance>.odoo.com/' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

上下文

  • 正在开发调用Odoo API的Web应用
  • Odoo服务器配置正常、运行稳定
  • 已尝试过Nginx配置调整,但需要不依赖Nginx的替代方案

请求

求无需修改Nginx配置的CORS问题解决思路/方案,涉及Odoo后端修改或其他CORS处理方法均可。

调用代码示例

const bClick = async () => {
   try {
      // Odoo配置信息
      const odooUrl = 'https://edu-purchase6.odoo.com';
      const dbName = 'edu-purchase6';
      const username = 'username';
      const password = 'password';

      // 认证请求
      const authResponse = await axios.post(odooUrl, {
         jsonrpc: '2.0',
         method: 'call',
         params: {
            db: dbName,
            login: username,
            password: password,
         },
         id: Math.floor(Math.random() * 1000)
      });

      const uid = authResponse.data.result.uid;
      // 查询客户数据
      const response = await axios.post(odooUrl, {
         jsonrpc: '2.0',
         method: 'call',
         params: {
            model: 'res.partner',
            method: 'search_read',
            args: [
               [['customer_rank', '>', 0], ['city', '=', 'Cairo']],
               ['name', 'email']
            ],
            kwargs: {
               limit: 10,
            },
            db: dbName,
            uid: uid,
            password: password,
         },
         id: Math.floor(Math.random() * 1000)
      });

      // this.customers = response.data.result;
   } catch (error) {
      console.error('Error fetching customers:', error);
   }
}

解决方案(无需Nginx配置)

1. Odoo后端安装CORS扩展模块

Odoo社区有现成的CORS管理模块,安装后可直接在后台配置允许的跨域来源:

  • 进入Odoo应用市场,搜索并安装cors模块
  • 安装完成后,进入「设置」-「技术」-「CORS配置」
  • 添加允许的来源:http://localhost:3000,同时可配置允许的HTTP方法、Headers等
  • 保存配置后重启Odoo服务即可生效

2. 修改Odoo核心配置文件(适用于自托管/可修改配置的实例)

如果是自行管理的Odoo实例,可直接修改odoo.conf添加CORS相关参数:

# 在odoo.conf中添加以下配置
http_cors = http://localhost:3000  # 开发环境临时测试可改用*,生产环境必须指定具体域名

修改后重启Odoo服务,跨域请求即可被允许。注意生产环境不要用*,需限制具体来源保障安全。

3. 前端开发环境配置代理(临时绕过方案)

若无法修改Odoo后端,可在前端开发环境配置代理转发请求:

  • 以Vue项目为例,在vue.config.js中添加代理配置:
module.exports = {
  devServer: {
    proxy: {
      '/odoo-proxy': {
        target: 'https://edu-purchase6.odoo.com',
        changeOrigin: true,
        pathRewrite: { '^/odoo-proxy': '' }
      }
    }
  }
}
  • 同步修改前端请求地址:
const odooUrl = '/odoo-proxy';

开发环境下请求会被代理转发,绕过CORS限制。生产环境可沿用类似代理思路,通过前端部署服务器转发请求,无需修改Odoo配置。

4. 修正Odoo JSON-RPC请求端点

你的请求直接指向Odoo根域名,可能触发重定向(比如跳转到登录页),这是预请求失败的核心原因之一。正确的JSON-RPC端点应为/jsonrpc,修改请求地址:

const odooUrl = 'https://edu-purchase6.odoo.com/jsonrpc';

此修改可能直接解决重定向导致的CORS错误,因为预请求不会再被重定向拦截。


内容的提问来源于stack exchange,提问作者aym1781969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:48:27