"""Authentication routes""" from flask import Blueprint, render_template, session, redirect, url_for from app import db from app.models import User from app.forms import RegisterForm, LoginForm auth_bp = Blueprint('auth', __name__) @auth_bp.route('/auth/register', methods=['GET', 'POST']) def register(): """Register a new user""" # validate form form = RegisterForm() if not form.validate_on_submit(): return render_template('auth/register.html', form=form) # create user user = User() form.populate_obj(user) db.session.add(user) db.session.commit() # set session session['auth'] = user.id return redirect(url_for('index')) @auth_bp.route('/auth/login', methods=['GET', 'POST']) def login(): """Login a user""" # validate form form = LoginForm() if not form.validate_on_submit(): return render_template('auth/login.html', form=form) # fetch user user = User.query.filter_by(name=form.name.data).first() # authenticate if not (user and user.authenticate(form.password.data)): return render_template('auth/login.html') # set session session['auth'] = user.id return redirect(url_for('index')) @auth_bp.route('/auth/logout') def logout(): """Log out by clearing the session""" session.clear() return redirect(url_for('index'))