You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.7 KiB
55 lines
1.7 KiB
from flask import (
|
|
Blueprint,
|
|
abort,
|
|
flash,
|
|
redirect,
|
|
render_template,
|
|
request,
|
|
send_from_directory,
|
|
session,
|
|
url_for,
|
|
)
|
|
from flask_bcrypt import check_password_hash
|
|
from flask_login import login_user
|
|
|
|
from forms.loginform import LoginForm
|
|
from models.user_model import User
|
|
|
|
login_section = Blueprint(
|
|
"login",
|
|
__name__,
|
|
template_folder="templates/statuspengguna",
|
|
static_folder="static",
|
|
)
|
|
|
|
|
|
@login_section.route("/", methods=["GET", "POST"])
|
|
def login():
|
|
return LoginUser()
|
|
|
|
|
|
def LoginUser():
|
|
loginform = LoginForm()
|
|
if loginform.validate_on_submit():
|
|
try:
|
|
user = User.query.filter_by(email=loginform.email.data).first()
|
|
if user is None:
|
|
loginform.password.errors.append("Invalid email or password!")
|
|
return render_template("login.html", loginform=loginform)
|
|
if check_password_hash(user.password, loginform.password.data):
|
|
print(type(user))
|
|
login_user(user)
|
|
flash("Logged in successfully.", "success")
|
|
next = request.args.get("next")
|
|
if next is not None and not is_safe_url(next): # noqa: F821
|
|
print(next)
|
|
return abort(400)
|
|
print("index")
|
|
return redirect(next or url_for("index"))
|
|
else:
|
|
flash("Invalid email or password!", "danger")
|
|
loginform.password.errors.append("Invalid email or password!")
|
|
return render_template("login.html", loginform=loginform)
|
|
except Exception as e:
|
|
flash(e, "danger")
|
|
return render_template("login.html", loginform=loginform)
|
|
|