Spaces:
Sleeping
Sleeping
| # custom_auth/controllers/main.py | |
| from odoo import http, _ | |
| from odoo.http import request | |
| from werkzeug.utils import redirect | |
| class CustomAuthController(http.Controller): | |
| # ------------------------- | |
| # SIGNUP PAGE | |
| # ------------------------- | |
| def signup_page(self, **kw): | |
| return request.render('custom_auth.signup_template', {}) | |
| def signup_submit(self, **post): | |
| name = post.get('name', '').strip() | |
| login = post.get('login', '').strip() | |
| password = post.get('password', '') | |
| confirm = post.get('confirm_password', '') | |
| errors = [] | |
| # Simple validation | |
| if not name: | |
| errors.append(_("Name is required")) | |
| if not login: | |
| errors.append(_("Email is required")) | |
| if not password: | |
| errors.append(_("Password is required")) | |
| if password != confirm: | |
| errors.append(_("Passwords do not match")) | |
| # Email already exists? | |
| existing_user = request.env['res.users'].sudo().search([('login', '=', login)], limit=1) | |
| if existing_user: | |
| errors.append(_("A user with this email already exists.")) | |
| if errors: | |
| return request.render('custom_auth.signup_template', { | |
| 'errors': errors, | |
| 'values': post | |
| }) | |
| # Create partner | |
| Partner = request.env['res.partner'].sudo().create({ | |
| 'name': name, | |
| 'email': login, | |
| }) | |
| # Create user | |
| try: | |
| User = request.env['res.users'].sudo().create({ | |
| 'name': name, | |
| 'login': login, | |
| 'email': login, | |
| 'partner_id': Partner.id, | |
| 'password': password, | |
| }) | |
| # Add user to portal group | |
| portal_group = request.env.ref('base.group_portal') | |
| User.sudo().write({'groups_id': [(4, portal_group.id)]}) | |
| except Exception as e: | |
| errors.append(_("Error creating user: %s") % e) | |
| return request.render('custom_auth.signup_template', { | |
| 'errors': errors, | |
| 'values': post | |
| }) | |
| # Auto login | |
| try: | |
| db = request.session.db | |
| request.session.authenticate(db, login, password) | |
| except: | |
| return redirect('/custom/login?signup=ok') | |
| return redirect('/') | |
| # ------------------------- | |
| # LOGIN PAGE | |
| # ------------------------- | |
| def login_page(self, **kw): | |
| message = None | |
| if kw.get("signup") == "ok": | |
| message = _("Signup successful. Please log in.") | |
| return request.render("custom_auth.login_template", {'message': message}) | |
| def login_submit(self, **post): | |
| login = post.get('login', '').strip() | |
| password = post.get('password', '') | |
| if not login or not password: | |
| return request.render('custom_auth.login_template', { | |
| 'errors': [_("Enter both email and password.")], | |
| 'values': post | |
| }) | |
| db = request.session.db | |
| try: | |
| request.session.authenticate(db, login, password) | |
| except: | |
| return request.render('custom_auth.login_template', { | |
| 'errors': [_("Incorrect email or password.")], | |
| 'values': post | |
| }) | |
| next_url = post.get('redirect') or '/' | |
| return redirect(next_url) | |
| # ------------------------- | |
| # LOGOUT | |
| # ------------------------- | |
| def logout(self, **kw): | |
| request.session.logout(keep_db=True) | |
| return redirect('/') |