diff --git a/addons/website/models/res_users.py b/addons/website/models/res_users.py
index 96d41d65f3393eeac0ab760e1216d825101ed1c4..10ebc1499e87d5df0c6cc7842e62ea1b1953352c 100644
--- a/addons/website/models/res_users.py
+++ b/addons/website/models/res_users.py
@@ -2,7 +2,7 @@
 # Part of Odoo. See LICENSE file for full copyright and licensing details.
 import logging
 
-from odoo import api, fields, models, _
+from odoo import api, fields, models, _, Command
 from odoo.exceptions import ValidationError
 from odoo.http import request
 
@@ -48,9 +48,12 @@ class ResUsers(models.Model):
     @api.model
     def _signup_create_user(self, values):
         current_website = self.env['website'].get_current_website()
+        # Note that for the moment, portal users can connect to all websites of
+        # all companies as long as the specific_user_account setting is not
+        # activated.
+        values['company_id'] = current_website.company_id.id
+        values['company_ids'] = [Command.link(current_website.company_id.id)]
         if request and current_website.specific_user_account:
-            values['company_id'] = current_website.company_id.id
-            values['company_ids'] = [(4, current_website.company_id.id)]
             values['website_id'] = current_website.id
         new_user = super(ResUsers, self)._signup_create_user(values)
         return new_user
diff --git a/addons/website/tests/test_res_users.py b/addons/website/tests/test_res_users.py
index 8aca623bec3300f4fa07c445482a2c42e310bba5..87814cbda839f11b9bd889beed4cf6f3da53e899 100644
--- a/addons/website/tests/test_res_users.py
+++ b/addons/website/tests/test_res_users.py
@@ -7,6 +7,7 @@ from odoo.tests.common import TransactionCase, new_test_user
 from odoo.exceptions import ValidationError
 from odoo.tools import mute_logger
 from odoo.service.model import retrying
+from odoo.addons.website.tools import MockRequest
 
 
 class TestWebsiteResUsers(TransactionCase):
@@ -64,3 +65,40 @@ class TestWebsiteResUsers(TransactionCase):
         # rollback in retrying().
         with TestCase.assertRaises(self, ValidationError), mute_logger('odoo.sql_db'):
             retrying(create_user_pou, env)
+
+    def _create_user_via_website(self, website, login):
+        # We need a fake request to _signup_create_user.
+        with MockRequest(self.env, website=website):
+            return self.env['res.users'].with_context(website_id=website.id)._signup_create_user({
+                'name': login,
+                'login': login,
+            })
+
+    def _create_and_check_portal_user(self, website_specific, company_1, company_2, website_1, website_2):
+        # Disable/Enable cross-website for portal users.
+        website_1.specific_user_account = website_specific
+        website_2.specific_user_account = website_specific
+
+        user_1 = self._create_user_via_website(website_1, 'user1')
+        user_2 = self._create_user_via_website(website_2, 'user2')
+        self.assertEqual(user_1.company_id, company_1)
+        self.assertEqual(user_2.company_id, company_2)
+
+        if website_specific:
+            self.assertEqual(user_1.website_id, website_1)
+            self.assertEqual(user_2.website_id, website_2)
+        else:
+            self.assertEqual(user_1.website_id.id, False)
+            self.assertEqual(user_2.website_id.id, False)
+
+    def test_multi_website_multi_company(self):
+        company_1 = self.env['res.company'].create({'name': "Company 1"})
+        company_2 = self.env['res.company'].create({'name': "Company 2"})
+        website_1 = self.env['website'].create({'name': "Website 1", 'company_id': company_1.id})
+        website_2 = self.env['website'].create({'name': "Website 2", 'company_id': company_2.id})
+        # Permit uninvited signup.
+        website_1.auth_signup_uninvited = 'b2c'
+        website_2.auth_signup_uninvited = 'b2c'
+
+        self._create_and_check_portal_user(False, company_1, company_2, website_1, website_2)
+        self._create_and_check_portal_user(True, company_1, company_2, website_1, website_2)