21 用户认证之用户登录

在上一篇中,我们讨论了用户注册的过程,确保用户能够创建一个账户并将其信息存储在数据库中。现在,我们将继续这个主题,探讨用户登录的实现。这是用户认证中至关重要的部分,因为只有经过验证的用户才能访问系统的特定资源。

用户登录概述

用户登录流程的主要目的是让用户通过提供其凭据(如用户名和密码)来验证其身份。成功登录后,服务器会创建一个会话,通常使用Flask-Login扩展来管理用户会话和权限。

主要步骤

  1. 创建登录表单:构建用户登录的表单。
  2. 验证用户凭据:检查用户提供的凭据是否正确。
  3. 建立会话:一旦用户验证通过,创建用户会话。
  4. 处理登出:提供退出会话的功能。

一、创建登录表单

首先,我们需要创建一个登录表单。我们可以使用Flask-WTF扩展来简化表单的创建和验证。

以下是一个简单的登录表单示例:

1
2
3
4
5
6
7
8
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

class LoginForm(FlaskForm):
username = StringField('用户名', validators=[DataRequired()])
password = PasswordField('密码', validators=[DataRequired()])
submit = SubmitField('登录')

二、验证用户凭据

接下来,我们需要编写一个视图函数来处理登录逻辑。我们将接收来自登录表单的请求,验证用户的凭据并在数据库中查找用户信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from flask import Flask, render_template, redirect, url_for, flash
from flask_login import LoginManager, login_user
from yourdatabase import User # 引入您的数据库模型
from yourforms import LoginForm

app = Flask(__name__)
login_manager = LoginManager(app)
login_manager.login_view = 'login' # 当未认证用户试图访问受保护的路由时的重定向路由

@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user and user.verify_password(form.password.data): # 假设您在 User 模型中实现了 verify_password 方法
login_user(user) # 使用 login_user 进行登录
return redirect(url_for('index')) # 登录成功重定向至首页
else:
flash('用户名或密码错误,请重试。')
return render_template('login.html', form=form)

在上述代码中,我们首先创建一个登录路由,如果用户提交表单(validate_on_submit),我们会检查数据库中是否存在该用户以及密码是否正确。

三、建立会话

使用 Flask-Loginlogin_user 函数会创建一个用户会话,允许用户在后续请求中保持身份验证状态。Flask-Login 也负责管理用户的会话超时、持久化和其他相关功能。

1
2
3
4
5
6
7
8
9
from flask_login import UserMixin

class User(UserMixin, db.Model): # 用户模型
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False)
password_hash = db.Column(db.String(128))

def verify_password(self, password):
return check_password_hash(self.password_hash, password) # 你需要引入相应的函数来检查密码

四、处理登出

实现登出功能非常简单,我们可以定义一个登出路由来注销用户会话。

1
2
3
4
5
6
from flask_login import logout_user

@app.route('/logout')
def logout():
logout_user() # 登出用户
return redirect(url_for('login')) # 重定向至登录页面

总结

在这一部分中,我们实现了基本的用户登录功能,包括创建登录表单、验证用户凭据、建立用户会话及处理登出。本节的实现建立在用户注册的基础之上,下一篇将讨论管理用户权限的相关内容,以确保登录用户的权限控制。

通过将用户的登录逻辑与后续权限功能结合起来,我们可以构建出一个健全的用户认证系统。这是建立任何Web应用程序时不可或缺的一部分,确保用户数据的安全性和私密性。在实施这些功能时,还要注意安全性,使用户的密码和个人信息不被泄露。

请准备好进入下一篇,深入讨论用户权限的管理和控制。

21 用户认证之用户登录

https://zglg.work/flask-zero/21/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

复习上节

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论