用户登录认证是 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 用户系统的基础利器。