我需要访问Odoo 10中的/ web / session / authenticate方法(来自Vue应用程序),但是我需要进行少量自定义。 Based on another post我看到应该可以超越Odoo的内置控制器,因此我可以在自定义控制器的自定义模块中使用它:
from odoo import http
from odoo.http import request
from odoo.addons.web.controllers.main import Session
class Session(Session):
@http.route('/web/session/authenticate', type='json', auth="none", cors="*")
def authenticate(self, db, login, password, base_location=None):
print("custom authentication method called")
request.session.authenticate(db, login, password)
return request.env['ir.http'].session_info()
与existing source code相比,可以看到我所做的只是添加了CORS支持(Vue应用程序中我的axios POST需要该路由)
我没有收到错误,但是由于某种原因,Odoo从未调用过我的自定义代码。也许这与我的模块的加载顺序有关?
答案 0 :(得分:0)
默认情况下,如果HTTP请求在会话中未指定数据库,则Odoo缺省不知道需要使用带有自定义控制器的自定义模块。
要解决此问题,可以将定制模块称为“服务器范围的模块”。这意味着它在服务器的整个上下文中使用,而不仅仅是在数据库的上下文中使用(它是会话信息的一部分)。可以通过添加--load=web,your_module_here
或将其添加到Odoo配置server_wide_modules = web,your_module_here
中来完成。
请注意,如果您没有web
作为服务器级模块之一,则所有内容都会以404响应结尾。 web
是Odoo中默认的服务器级模块