Skip to content
Snippets Groups Projects
Commit 66692424 authored by Martin Mareš's avatar Martin Mareš
Browse files

Registrace používá find_or_create_user

Tím se zavírá race condition při zakládání řádků v tabulce user.
parent 6aff4e91
Branches
No related tags found
1 merge request!129Bezpečné transakce při zakládání uživatelů/účastníků/účastí
...@@ -498,31 +498,23 @@ class Reg2: ...@@ -498,31 +498,23 @@ class Reg2:
email = mo.users.normalize_email(rr.email) # Pro jistotu email = mo.users.normalize_email(rr.email) # Pro jistotu
sess = db.get_session() sess = db.get_session()
if db.get_session().query(db.User).with_for_update().filter_by(email=email).one_or_none(): try:
user, is_new, _ = mo.users.find_or_create_user(email, first_name, last_name, is_org=False, reason='register')
except mo.CheckError as e:
app.logger.info(f'Reg2: Založení účtu {email} selhalo: {e}')
self.status = RegStatus.already_exists
return False
if not is_new:
# Účet mohl začít existovat mezi 1. a 2. krokem registrace # Účet mohl začít existovat mezi 1. a 2. krokem registrace
app.logger.info(f'Reg2: Účet s e-mailem {email} začal během registrace existovat') app.logger.info(f'Reg2: Účet s e-mailem {email} začal během registrace existovat')
self.status = RegStatus.already_exists self.status = RegStatus.already_exists
return False return False
user = db.User(
email=email,
first_name=first_name,
last_name=last_name,
)
mo.users.set_password(user, passwd) mo.users.set_password(user, passwd)
mo.users.login(user)
rr.used_at = mo.now rr.used_at = mo.now
sess.add(user)
sess.flush()
app.logger.info(f'Reg2: Založen uživatel user=#{user.user_id} email=<{user.email}>')
mo.util.log(
type=db.LogType.user,
what=user.user_id,
details={'action': 'register', 'new': db.row2dict(user)},
)
mo.users.login(user)
sess.commit() sess.commit()
self.user = user self.user = user
return True return True
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment