Odoo 14社区版自定义登录页对接系统及替换默认页配置咨询
Odoo 14 Community 自定义登录页对接与替换方案
一、自定义登录页对接Odoo系统
有两种可行方案,根据你的页面开发场景选择:
方案1:调用Odoo登录API
用POST请求调用Odoo内置的/web/session/authenticate接口,请求体为JSON格式,需传入以下核心参数:db:目标登录的数据库名称login:用户账号password:用户密码csrf_token:先通过GET请求/web/session/get_csrf_token获取(请求需携带Odoo的Session Cookie)
示例JavaScript实现:
// 先获取CSRF Token fetch('/web/session/get_csrf_token', { credentials: 'include' }) .then(res => res.json()) .then(data => { // 发起登录请求 fetch('/web/session/authenticate', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': data.csrf_token }, body: JSON.stringify({ jsonrpc: '2.0', method: 'call', params: { db: 'your_database_name', login: 'user@example.com', password: 'your_password' }, id: 1 }) }) .then(res => res.json()) .then(result => { if (result.result) { // 登录成功跳转至Odoo首页 window.location.href = '/web'; } else { // 处理登录失败逻辑 alert('登录失败:' + result.error.message); } }); });方案2:表单直接提交至Odoo默认登录地址
将自定义页面的表单action属性设为Odoo的/web/login,表单字段名与Odoo默认登录页保持一致即可:<form action="/web/login" method="post"> <!-- 隐藏字段:CSRF Token,需从Odoo获取后填充 --> <input type="hidden" name="csrf_token" value="your_csrf_token"> <!-- 数据库字段:可固定值或做下拉选择 --> <input type="text" name="db" value="your_database_name"> <!-- 用户名输入框 --> <input type="text" name="login" placeholder="账号"> <!-- 密码输入框 --> <input type="password" name="password" placeholder="密码"> <button type="submit">登录</button> </form>注意:CSRF Token需通过
/web/session/get_csrf_token接口获取,若自定义页面与Odoo同域名,也可从Odoo的Cookie中解析获取。
二、配置Odoo替换默认登录页为自定义页面
推荐用自定义模块实现,避免修改Odoo核心代码导致升级丢失:
- 创建自定义模块(示例命名为
custom_login),模块结构如下:custom_login/ ├── __init__.py ├── __manifest__.py └── views/ └── templates.xml - 编写
__manifest__.py模块配置文件:{ 'name': 'Custom Login Page', 'version': '1.0', 'summary': 'Replace default login page with custom one', 'depends': ['web'], 'data': [ 'views/templates.xml', ], 'installable': True, 'application': False, 'auto_install': False, } - 编写
views/templates.xml模板覆盖文件:
若直接嵌入自定义登录HTML:
若要重定向到外部自定义页面:<odoo> <template id="login" inherit_id="web.login"> <xpath expr="//div[@class='oe_login_container']" position="replace"> <div class="custom_login_container"> <h1>自定义登录页</h1> <!-- 嵌入你的登录表单及逻辑 --> <form action="/web/login" method="post"> <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/> <input type="text" name="db" t-att-value="request.session.db"/> <input type="text" name="login" placeholder="请输入账号"/> <input type="password" name="password" placeholder="请输入密码"/> <button type="submit">登录</button> </form> </div> </xpath> </template> </odoo><odoo> <template id="login" inherit_id="web.login"> <t position="replace"> <script> window.location.href = 'your-custom-login-page-url'; </script> </t> </template> </odoo> - 安装模块:将模块放入Odoo的
addons目录,重启Odoo服务,在应用列表中找到Custom Login Page模块并安装即可生效。
若临时测试不想创建模块,也可直接修改Odoo核心的web/views/webclient_templates.xml中的login模板,但此方法不推荐,升级Odoo后修改会被覆盖。
内容的提问来源于stack exchange,提问作者holydragon
相关产品推荐
相关产品推荐

