目录
Flask 用户认证与授权详细教程
在现代Web开发中,用户身份验证和授权是非常重要的要素。这篇教程将会指导你如何使用 Flask 中的 Flask-Login
库来实现用户注册、登录、登出功能,以及如何使用 Flask-Principal
或其他 RBAC(基于角色的访问控制)解决方案来管理用户权限。
一、用户认证
1.1 安装 Flask-Login
在开始之前,我们需要安装 Flask-Login
。在命令行中执行以下命令:
pip install Flask-Login
1.2 创建基本的 Flask 应用
首先,创建一个基本的 Flask 应用并配置数据库连接:
import os
from flask import Flask, render_template, redirect, url_for, flash, request
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
app = Flask(__name__)
app.secret_key = os.urandom(24) # 设置随机密钥
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login' # 登录视图
1.3 创建用户模型
创建一个用户模型来存储用户数据。
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(200), nullable=False)
def __repr__(self):
return f'<User {
self.username}>'
1.4 创建数据库
在应用启动时创建数据库。这可以在其他地方执行,例如在命令行交互中。
with app.app_context():
db.create_all()
1.5 加载用户回调
实现用户加载回调功能,Flask-Login
会通过用户 ID 加载用户对象。
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
1.6 用户注册
实现用户注册功能:
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
new_user = User(username=username, password=password)
db.session.add(new_user)
db.session.commit()
flash('User registered successfully!')
return redirect(url_for('login'))
return render_template('register.html')
创建 register.html
模板:
<!doctype html>
<html>
<head>
<title>Register</title>
</head>
<body>
<h1>Register</h1>
<form method="POST">
<label for="username">Username:</label>
<input type="text" name="username" required>
<br>
<label for="password">Password:</label>
<input type="password"