from flask import Blueprint, render_template, redirect, url_for, request, flash from werkzeug.security import generate_password_hash, check_password_hash from flask_login import current_user, login_user, logout_user from .models import User from . import db auth = Blueprint("auth", __name__) @auth.route("/login", methods=["GET", "POST"]) def login(): if current_user.is_authenticated: return redirect(url_for("main.index")) elif request.method == "GET": return render_template("login.html") elif request.method == "POST": email = request.form.get("email") password = request.form.get("password") remember = True if request.form.get("remember") else False user = User.query.filter_by(email=email).first() if not user or not check_password_hash(user.password, password): flash("Please check your login details and try again.") return redirect(url_for("auth.login")) login_user(user, remember=remember) return redirect(url_for("main.profile")) @auth.route("/signup", methods=["GET", "POST"]) def signup(): if current_user.is_authenticated: return redirect(url_for("main.index")) elif request.method == "GET": return render_template("signup.html") elif request.method == "POST": email = request.form.get("email") name = request.form.get("name") password = request.form.get("password") user = User.query.filter_by(email=email).first() if user: flash("Email address already exists") return redirect(url_for("auth.signup")) new_user = User( email=email, name=name, password=generate_password_hash(password, method="sha256"), ) db.session.add(new_user) db.session.commit() return redirect(url_for("auth.login")) @auth.route("/logout") def logout(): logout_user() return redirect(url_for("main.index"))