diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index af6554f483c..e2833559374 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -21,7 +21,7 @@ import odoo from odoo import http, models, fields, _ from odoo.exceptions import AccessError -from odoo.http import request +from odoo.http import request, SessionExpiredException from odoo.osv import expression from odoo.tools import OrderedSet, escape_psql, html_escape as escape from odoo.addons.http_routing.models.ir_http import slug, slugify, _guess_mimetype @@ -106,7 +106,7 @@ class Website(Home): if homepage_url and homepage_url != '/': try: return request._serve_ir_http() - except (AccessError, NotFound): + except (AccessError, NotFound, SessionExpiredException): pass # Fallback on first accessible menu diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 0d6c38ce26a..5f58ebab4e8 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -123,6 +123,14 @@ class Http(models.AbstractModel): model=ModelConverter, ) + @classmethod + def _get_public_users(cls): + public_users = super()._get_public_users() + website = request.env(user=SUPERUSER_ID)['website'].get_current_website() # sudo + if website: + public_users.append(website._get_cached('user_id')) + return public_users + @classmethod def _auth_method_public(cls): """ If no user logged, set the public user of current website, or default diff --git a/addons/website/tests/test_page.py b/addons/website/tests/test_page.py index d8a859d516a..e3673cfbabc 100644 --- a/addons/website/tests/test_page.py +++ b/addons/website/tests/test_page.py @@ -407,6 +407,34 @@ class WithContext(HttpCase): self.assertEqual(r.url, home_url_full) self.assertIn(b'o_website_info', r.content) + # Case 6: Check controller redirect which has different `auth` method + website.homepage_url = '/my' + # ------------------------------------------- + # / page exists | first menu | homepage_url + # ------------------------------------------- + # no | /contactus | /my + # ------------------------------------------- + r = self.url_open(home_url) + self.assertEqual(r.status_code, 200) + self.assertNotIn(b'