第7章:用户认证
7.1 用户认证的重要性
用户认证是确定用户身份的过程,它是任何需要用户登录的应用的关键部分。认证确保只有经过验证的用户才能访问受限资源。
7.2 Flask-Login扩展的使用
Flask-Login提供了用户会话管理的简单方法。它处理用户登录和登出,并可以记住用户登录状态。
示例代码:安装Flask-Login
bash
pip install flask-login
示例代码:配置Flask-Login
python
from flask_login import LoginManager
login_manager = LoginManager()
login_manager.init_app(app)
# 设置用户加载函数
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
7.3 用户注册和登录流程
用户注册是创建新用户账户的过程,而登录是用户验证其身份的过程。
示例代码:用户注册
python
from flask import render_template, redirect, url_for, flash
from flask_login import login_user
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
# 假设有表单数据username和password
user = User(username=request.form['username'], password=hashed_password)
db.session.add(user)
db.session.commit()
flash('Your account has been created!', 'success')
return redirect(url_for('login'))
return render_template('register.html')
示例代码:用户登录
python
from flask_login import login_user, current_user, logout_user
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
user = User.query.filter_by(username=request.form['username']).first()
if user and user.check_password(request.form['password']):
login_user(user)
next_page = request.args.get('next')
return redirect(next_page) if next_page else redirect(url_for('index'))
else:
flash('Login Unsuccessful. Please check username and password', 'danger')
return render_template('login.html')
7.4 用户会话管理
用户会话管理包括登录、登出和记住用户状态。
示例代码:用户登出
python
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('index'))
示例代码:记住用户状态
python
from flask_login import remember_cookie_permanent
@app.route('/remember')
@login_required
def remember_me():
remember_cookie_permanent()
return 'Remember Me cookie set'
7.5 保护路由
您可以使用@login_required
装饰器来保护需要用户登录才能访问的路由。
示例代码:保护路由
python
from flask_login import login_required
@app.route('/dashboard')
@login_required
def dashboard():
return render_template('dashboard.html')
7.6 总结
本章介绍了用户认证的重要性,以及如何使用Flask-Login扩展来管理用户注册、登录、登出和会话。