graceful handling of database integrity violations in registration
This commit is contained in:
parent
fd96be4752
commit
8076d8571d
1 changed files with 17 additions and 3 deletions
|
@ -6,6 +6,7 @@ from goathacks.registration.forms import LoginForm, PwResetForm, RegisterForm, R
|
||||||
from werkzeug.security import check_password_hash, generate_password_hash
|
from werkzeug.security import check_password_hash, generate_password_hash
|
||||||
from flask_mail import Message
|
from flask_mail import Message
|
||||||
import ulid
|
import ulid
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from goathacks import db, mail as app_mail
|
from goathacks import db, mail as app_mail
|
||||||
from goathacks.models import PwResetRequest, User
|
from goathacks.models import PwResetRequest, User
|
||||||
|
@ -60,8 +61,20 @@ def register():
|
||||||
dietary_restrictions=dietary_restrictions,
|
dietary_restrictions=dietary_restrictions,
|
||||||
newsletter=newsletter
|
newsletter=newsletter
|
||||||
)
|
)
|
||||||
db.session.add(user)
|
|
||||||
db.session.commit()
|
#try to add the user to the database, checking for duplicate users
|
||||||
|
try:
|
||||||
|
db.session.add(user)
|
||||||
|
db.session.commit()
|
||||||
|
except IntegrityError as err:
|
||||||
|
db.session.rollback()
|
||||||
|
if "duplicate key value violates unique constraint" in str(err):
|
||||||
|
flash("User with email " + email + " already exists.")
|
||||||
|
else:
|
||||||
|
flash("An unknown error occurred.")
|
||||||
|
return render_template("register.html", form=form)
|
||||||
|
|
||||||
|
#user successfully registered, so login
|
||||||
flask_login.login_user(user)
|
flask_login.login_user(user)
|
||||||
|
|
||||||
if waitlisted:
|
if waitlisted:
|
||||||
|
@ -129,9 +142,10 @@ def reset():
|
||||||
user_id=user.id,
|
user_id=user.id,
|
||||||
expires=datetime.now() + timedelta(minutes=30)
|
expires=datetime.now() + timedelta(minutes=30)
|
||||||
)
|
)
|
||||||
|
|
||||||
db.session.add(r)
|
db.session.add(r)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
msg = Message("GoatHacks - Password Reset Request")
|
msg = Message("GoatHacks - Password Reset Request")
|
||||||
msg.add_recipient(user.email)
|
msg.add_recipient(user.email)
|
||||||
msg.body = render_template("emails/password_reset.txt", code=r.id)
|
msg.body = render_template("emails/password_reset.txt", code=r.id)
|
||||||
|
|
Loading…
Add table
Reference in a new issue