用户登录认证是 Web 应用的基础功能。Flask 官方生态中,Flask-Login 是最常用且简单好用的扩展,帮你快速实现用户登录管理。

本文带你实战演示如何用 Flask-Login 搭建登录认证功能。


一、安装 Flask-Login

pip install flask-login

二、快速示例

from flask import Flask, render_template, redirect, url_for, request
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user

app = Flask(__name__)
app.secret_key = "super secret key"  # session 密钥

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'  # 未登录跳转的视图函数名

# 模拟用户数据库
users = {
    "admin": {"password": "123456"},
    "guest": {"password": "guest"}
}

class User(UserMixin):
    def __init__(self, username):
        self.id = username

@login_manager.user_loader
def load_user(user_id):
    if user_id in users:
        return User(user_id)
    return None

@app.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        username = request.form.get("username")
        password = request.form.get("password")
        user_info = users.get(username)
        if user_info and user_info["password"] == password:
            user = User(username)
            login_user(user)  # 登录用户,写 session
            return redirect(url_for("protected"))
        return "用户名或密码错误", 401
    return '''
    <form method="post">
      用户名:<input type="text" name="username" /><br/>
      密码:<input type="password" name="password" /><br/>
      <input type="submit" value="登录" />
    </form>
    '''

@app.route("/protected")
@login_required  # 需要登录后访问
def protected():
    return f"欢迎 {current_user.id},这是登录保护页面"

@app.route("/logout")
@login_required
def logout():
    logout_user()
    return "已登出"

三、关键点说明

  • UserMixin 提供了用户模型必须实现的属性和方法
  • login_user() 登录后写 session
  • @login_required 装饰器保护路由,未登录自动跳转 login_view
  • load_user 回调用于根据用户 id 加载用户对象
  • Flask-Login 只管登录状态管理,不管用户数据存储,你可以换成数据库

四、扩展建议

  • 密码用哈希(如 bcrypt)存储,避免明文
  • 配合 Flask-WTF 做表单验证,防止 CSRF
  • 登录失败要限制尝试次数,防止暴力破解
  • 可集成 OAuth 第三方登录(Google、GitHub)

五、总结

Flask-Login 用起来非常简单,核心就是“用户加载”和“登录状态维护”两步。

它帮你解决 session 登录态,自动管理登录跳转,是构建 Flask 用户系统的基础利器。


添加微信