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
相关产品推荐
相关产品推荐

