Skip to content

Commit b36dd13

Browse files
committed
duplicate username race condition
1 parent f571e0a commit b36dd13

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

myapp/routes/register.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from datetime import datetime
99
from ._utils import META_TAGS, check_email, password_check, navbar_A
1010
from flask_login import current_user
11+
from sqlalchemy.exc import IntegrityError
1112

1213

1314
dashapp = dash.Dash("register", url_base_pathname=f'{PAGE_PREFIX}/register/',meta_tags=META_TAGS, server=app, external_stylesheets=[dbc.themes.BOOTSTRAP], title="Register", assets_folder=app.config["APP_ASSETS"])# , assets_folder="/flaski/flaski/static/dash/")
@@ -297,7 +298,17 @@ def submit_register(n_clicks,first_name, last_name, username, email,passA, passB
297298
user.set_password(passA)
298299
user.registered_on=datetime.utcnow()
299300
db.session.add(user)
300-
db.session.commit()
301+
try:
302+
db.session.commit()
303+
except IntegrityError as e:
304+
db.session.rollback()
305+
if "ix_user_username" in str(e.orig):
306+
username_ = dbc.Alert("Username already in use.", color="warning")
307+
elif "email" in str(e.orig):
308+
email_ = dbc.Alert("Email already in use.", color="warning")
309+
else:
310+
submission_ = dbc.Alert("A database error occurred.", color="danger")
311+
return first_name_, last_name_, username_, email_, passA_, passB_, agree_, submission_
301312

302313
if app.config['PREAUTH'] :
303314
send_validate_email(user, step="admin")

0 commit comments

Comments
 (0)