Skip to content

Instantly share code, notes, and snippets.

@Julian-Nash
Last active August 30, 2018 00:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Julian-Nash/12a8ae2b9a2ce5cf2afaa1fe37eb1b51 to your computer and use it in GitHub Desktop.
Save Julian-Nash/12a8ae2b9a2ce5cf2afaa1fe37eb1b51 to your computer and use it in GitHub Desktop.
Simple user login route & password hashing/checking functions for flask using mongoengine and bcrypt
# mongoengine class
class User(DynamicDocument):
date_created = DateTimeField(default=datetime.datetime.utcnow)
username = StringField(unique=True)
password = BinaryField(required=True)
email = EmailField(unique=True)
admin = BooleanField(default=False)
data_sets = DictField()
# Hashing & password checking functions
def hash_password(password):
return bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
def check_password(password_from_form, password_from_db):
if bcrypt.checkpw(password_from_form.encode("utf-8"), password_from_db):
return True
else:
return False
# Flask login route
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
form_username = request.form["username"]
form_password = request.form["password"]
error = "Invalid credentials"
user_attempt = User.objects(username__exact=form_username)
if user_attempt:
for user in user_attempt:
if user.username == form_username:
if check_password(password_from_db=user.password, password_from_form=form_password):
session["LOGGED_IN"] = True
return redirect(url_for("dashboard"))
else:
return render_template("frontend/login.html", toast=error)
else:
return render_template("frontend/login.html", toast=error)
else:
return render_template("frontend/login.html", toast=error)
else:
return render_template("frontend/login.html")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment