Files
project_v19/ck_signup/controllers/login_controller.py
T
2026-07-01 14:41:49 +07:00

59 lines
2.9 KiB
Python

# -*- coding: utf-8 -*-
import logging
from odoo import http
from odoo.http import request
from odoo.addons.web.controllers.home import Home as WebHome
_logger = logging.getLogger(__name__)
class CustomWebLogin(WebHome):
@http.route('/web/login', type='http', auth="none", sitemap=False)
def web_login(self, redirect=None, **kw):
# 1️⃣ Let parent handle GET requests & render login form
response = super().web_login(redirect=redirect, **kw)
# 2️⃣ Handle POST submission
if request.httprequest.method == 'POST':
login = request.params.get('login', '').strip()
password = request.params.get('password', '').strip()
pin_code_input = request.params.get('pin_code', '').strip() # Match your XML field name
if login and password:
# ⚠️ CRITICAL: Use 'odoo_env' NOT 'env' to avoid shadowing request.env
odoo_env = request.env
user = odoo_env['res.users'].sudo().search([('login', '=', login)], limit=1)
if not user:
response.qcontext['error'] = "ឈ្មោះអ្នកប្រើប្រាស់ ឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ។"
return response
# 3️⃣ Handle Inactive Users (PIN Verification)
if not user.active:
if not pin_code_input:
response.qcontext['error'] = "សូមបញ្ចូលលេខកូដ PIN ដើម្បីដំណើរការគណនី។"
return response
if user.pin_code and pin_code_input == user.pin_code:
user.sudo().write({
'active': True,
'pin_code': False, # Clear used PIN
'first_login': True,
})
else:
response.qcontext['error'] = "លេខកូដ PIN មិនត្រឹមត្រូវ។"
return response
# 4️⃣ Authenticate (EXACTLY 3 arguments for Odoo 19)
try:
request.session.authenticate(
request.session.db, # Database name
login, # Login
password # Password
)
# Success: Redirect to dashboard
return request.redirect(redirect or '/web')
except Exception as e:
_logger.warning(f"Login failed for {login}: {e}")
response.qcontext['error'] = "ឈ្មោះអ្នកប្រើប្រាស់ ឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ។"
return response
return response