I use Odoo 11 and i need to call some methods declared into models of backend from website by a not logged user..
Into controller i used the paramenter auth="public" and some .sudo() into write and search....and all works great, but i have some methods called by javascript into backend that when a not logged user trigger that methods i receive this error:
/11.0/OCB/odoo/addons/base/ir/ir_http.py(90)_auth_method_user()
raise http.SessionExpiredException("Session expired")
There is something that can i do? The backend have the sudo().write() too or sudo().search() but still get the error.... with a logged Porta user no problems, but i need to let usable from not logged users!
This is the method that send me the error message from model ir.http
@classmethod
def _auth_method_user(cls):
request.uid = request.session.uid
if not request.uid:
raise http.SessionExpiredException("Session expired")
I solved the problem by moving all backends methods into controllers with paramenter auth="public" and this let me to make action without auth permissions.
@http.route("/save_values",
type="json",
auth="public",
website=True)
def save_values(self, value_from_js):
checklist_line_obj = request.env['worksheet.checklist.line']
for line_id in value_from_js:
line = checklist_line_obj.browse(int(line_id))
vals = value_from_js[line_id]
line.sudo().write(vals)
And Here the Javascript that call the Controller:
ajax.jsonRpc("/save_values", "call", {"value_from_js": dataToSendWorksheet})
.then(function () {
//DO something
});