Add login, logout, and @login_required protection to routes with Flask-Login.
Authentication with Flask-Login
pip install flask-login
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user
login_manager = LoginManager()
login_manager.login_view = "auth.login"
class User(UserMixin, db.Model):
# UserMixin adds: is_authenticated, is_active, get_id()
pass
@login_manager.user_loader
def load_user(user_id):
return db.session.get(User, int(user_id))
# Login
@auth_bp.route("/login", methods=["GET","POST"])
def login():
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if user and user.check_password(form.password.data):
login_user(user, remember=form.remember.data)
return redirect(url_for("main.dashboard"))
return render_template("login.html", form=form)
# Protect routes
@app.route("/dashboard")
@login_required
def dashboard():
return "Hello " + current_user.name
@auth_bp.route("/logout")
@login_required
def logout():
logout_user()
return redirect(url_for("auth.login"))