Flask 是一個(gè)輕量級(jí)的 Python Web 框架,它可以通過使用擴(kuò)展來實(shí)現(xiàn)用戶認(rèn)證功能。Flask-Login 是最流行的 Flask 用戶認(rèn)證擴(kuò)展之一。以下是使用 Flask-Login 進(jìn)行用戶認(rèn)證的基本步驟:
pip install flask-login
from flask_login import LoginManager
app = Flask(__name__)
login_manager = LoginManager()
login_manager.init_app(app)
flask_login.UserMixin
。這個(gè)類將包含用戶的屬性和方法,例如用戶名、密碼哈希、電子郵件地址等。Flask-Login 使用 UserMixin
來提供默認(rèn)的用戶方法實(shí)現(xiàn)。from flask_login import UserMixin
class User(UserMixin):
def __init__(self, id):
self.id = id
注意:在實(shí)際應(yīng)用中,你應(yīng)該使用密碼哈希而不是明文密碼來存儲(chǔ)用戶密碼。你可以使用 Flask 的擴(kuò)展 werkzeug.security
中的 generate_password_hash
和 check_password_hash
函數(shù)來處理密碼哈希。
@login_manager.user_loader
裝飾器定義一個(gè)用戶加載函數(shù)。這個(gè)函數(shù)接收一個(gè)用戶 ID 作為參數(shù),并返回與該 ID 對(duì)應(yīng)的用戶對(duì)象。@login_manager.user_loader
def load_user(user_id):
return User(user_id)
login_user
和 logout_user
函數(shù)來處理用戶登錄和注銷操作。from flask import redirect, url_for, render_template, request
from flask_login import login_user, logout_user, login_required
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
user_id = request.form['user_id'] # 從表單中獲取用戶 ID
user = load_user(user_id) # 加載用戶對(duì)象
if user:
login_user(user) # 登錄用戶
return redirect(url_for('dashboard')) # 重定向到用戶主頁(yè)
return render_template('login.html')
@app.route('/logout')
@login_required
def logout():
logout_user() # 注銷用戶
return redirect(url_for('login')) # 重定向到登錄頁(yè)面
@login_required
裝飾器保護(hù)需要登錄才能訪問的路由。@app.route('/dashboard')
@login_required
def dashboard():
return render_template('dashboard.html')
以上是使用 Flask-Login 進(jìn)行用戶認(rèn)證的基本步驟。你還可以使用 Flask-Login 提供的其他功能,例如記住用戶登錄狀態(tài)(通過設(shè)置 login_view
)、訪問用戶信息(通過 current_user
對(duì)象)等。你可以查閱 Flask-Login 的官方文檔以獲取更多詳細(xì)信息和示例。