Spaces:
Sleeping
Sleeping
File size: 4,088 Bytes
16c6829 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# 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
# -------------------------
@http.route(['/custom/signup'], type='http', auth='public', website=True)
def signup_page(self, **kw):
return request.render('custom_auth.signup_template', {})
@http.route(['/custom/signup/submit'], type='http', methods=['POST'], auth='public', website=True, csrf=True)
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
# -------------------------
@http.route(['/custom/login'], type='http', auth='public', website=True)
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})
@http.route(['/custom/login/submit'], type='http', methods=['POST'], auth='public', website=True, csrf=True)
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
# -------------------------
@http.route(['/custom/logout'], type='http', auth='user', website=True)
def logout(self, **kw):
request.session.logout(keep_db=True)
return redirect('/') |