diff --git a/__init__.py b/__init__.py
index e046e49fbe22a4768c49bca1ed4cc0b0487c66c3..91c5580fed3661d34004101993044fbc5b832d27 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1 +1,2 @@
 from . import controllers
+from . import models
diff --git a/controllers/main.py b/controllers/main.py
index 2c0a61535ae097850aae91cf44dc89f2eca8dd04..ef1cc7becca77513f5d9ee307b32e15c4271663b 100644
--- a/controllers/main.py
+++ b/controllers/main.py
@@ -1,3 +1,6 @@
+# Copyright 2024- Le Filament (https://le-filament.com)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
 from odoo import _, http, tools
 
 from odoo.addons.auth_signup.controllers.main import AuthSignupHome
@@ -36,3 +39,9 @@ class SolagroAuthSignupHome(AuthSignupHome):
         # update request params because super() uses this instead of kwargs
         http.request.params.update(post)
         return super().web_auth_signup(**post)
+
+    def do_signup(self, qcontext):
+        # inject qcontext email in request params login
+        # because it is used in web login controller
+        http.request.params['login'] = qcontext['email']
+        return super().do_signup(qcontext)
diff --git a/models/__init__.py b/models/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..91fed54d404eac384a0186fdf541d0e354a4171f
--- /dev/null
+++ b/models/__init__.py
@@ -0,0 +1 @@
+from . import res_partner
diff --git a/models/res_partner.py b/models/res_partner.py
new file mode 100644
index 0000000000000000000000000000000000000000..6450f8cb109e50de762cd04f042151a0b0f62c03
--- /dev/null
+++ b/models/res_partner.py
@@ -0,0 +1,20 @@
+# Copyright 2024- Le Filament (https://le-filament.com)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models, api
+
+class ResPartner(models.Model):
+    _inherit = 'res.partner'
+
+    @api.model
+    def signup_retrieve_info(self, token):
+        """ """
+        partner = self._signup_retrieve_partner(token, raise_exception=True)
+        res = super().signup_retrieve_info(token)
+        if partner.user_ids:
+            # only for display in reset password page
+            res['firstname'] = partner.user_ids[0].firstname
+            res['lastname'] = partner.user_ids[0].lastname
+            # because email is used as user login
+            res['email'] = res['login']
+        return res