0

0

Flask中的用户身份验证和授权

WBOY

WBOY

发布时间:2023-06-17 18:02:05

|

3614人浏览过

|

来源于php中文网

原创

随着web应用程序的广泛使用,安全性和数据保护已经成为web应用程序开发的一个重要问题。为了确保web应用程序的安全性,需要进行用户身份验证和授权。flask作为一个流行的web开发框架,提供了很多用于实现用户身份验证和授权的机制。

  1. 用户身份验证

用户身份验证是指在用户访问Web应用程序的时候,通过一定的身份验证方式来确定用户的身份是否合法。Flask提供了很多内置的方法来实现用户身份验证。

1.1. HTTP基本认证

HTTP基本认证是一种基于HTTP协议的身份验证机制,它要求用户在请求资源时提供用户名和密码进行验证。Flask内置了HTTP基本认证的功能,通过 Flask-BasicAuth 扩展可以轻易地实现基本认证功能。

使用 Flask-BasicAuth 扩展,需要在 Flask 应用中安装并创建一个 BasicAuth 对象,然后将其装饰在需要进行基本认证的路由函数上。示例代码如下:

from flask import Flask
from flask_basicauth import BasicAuth

app = Flask(__name__)

app.config['BASIC_AUTH_USERNAME'] = 'username'
app.config['BASIC_AUTH_PASSWORD'] = 'password'

basic_auth = BasicAuth(app)

@app.route('/')
@basic_auth.required
def index():
    return 'Hello, World!'

上面的代码中,BasicAuth的两个配置项用于设置用户名和密码。路由函数上的 @basic_auth.required 装饰器实现了基本认证的功能。

1.2. 表单认证

表单认证是Web应用程序中最常见的身份验证方式之一。在Flask中实现表单认证一般需要使用 Flask-Login 扩展。

Flask-Login 扩展提供了一个 UserMixin 类,可以用于表示用户数据模型。示例代码如下:

OpenWBS 高端企业商城系统(手机端+PC端+微信+分销) X5.9.4
OpenWBS 高端企业商城系统(手机端+PC端+微信+分销) X5.9.4

OpenWBS B2C商城系统是一款功能强大的企业商城管理系统,主要面向广大的电商企业用户,系统支持快速搭建电商商城,以提高商家营销能力和平台运营能力为核心,为企业打造便捷高效的电子商务商城网站。 系统特点:功能强大安全稳定无漏洞操作简单 部署方式:独立部署(系统和数据库安装到企业客户自己的服务器里,保证安全) 授权类型:商业授权(年版授权、终身授权、源码授权) 配

下载
from flask_login import UserMixin

class User(UserMixin):
    def __init__(self, id, username, password):
        self.id = id
        self.username = username
        self.password = password

    def get_id(self):
        return str(self.id)

示例代码中,User 类继承自 flask_login.UserMixin 类,其中包含了常用的用户认证方法。在 Flask-Login 扩展中,还需要提供一个用户加载函数,用于加载用户数据。示例代码如下:

from flask_login import login_user, LoginManager
from flask import Flask, render_template, redirect, url_for
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.secret_key = 'your secret key'

login_manager = LoginManager(app)

# 用户数据
users = {
    1: {'username': 'user1', 'password': 'password1'},
    2: {'username': 'user2', 'password': 'password2'},
    3: {'username': 'user3', 'password': 'password3'},
}

# 实现用户加载函数
@login_manager.user_loader
def load_user(user_id):
    user = users.get(int(user_id))
    if user:
        return User(user_id, user['username'], user['password'])
    return None

# 实现登录视图
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        for user_id, user_data in users.items():
            if user_data['username'] == username and check_password_hash(user_data['password'], password):
                user = User(user_id, username, password)
                login_user(user)
                return redirect(url_for('index'))
        return 'Invalid username/password combination'
    return render_template('login.html')

# 实现需要登录才能访问的视图
@app.route('/')
@login_required
def index():
    return 'Hello, World!'

示例代码中,使用 Flask-Login 扩展需要对 Flask 应用进行初始化并设置 secret_key,然后通过 login_manager.user_loader 装饰器实现用户加载函数。最后,在需要登录才能访问的视图函数上使用 @login_required 装饰器即可实现登录控制。

  1. 用户授权

用户授权是指确定哪些用户可以访问哪些资源。在Flask中实现用户授权需要使用 Flask-Principal 扩展。

Flask-Principal 扩展提供了 Permission、Role 和 Identity 三个类,可以用于定义用户访问资源的权限。Permission 表示请求访问某个资源的权限,Role 表示用户身份或group,Identity 表示某个用户的身份信息。

示例代码如下:

from flask_principal import Principal, Identity, AnonymousIdentity, Permission, RoleNeed

app = Flask(__name__)

principal = Principal(app)

# 定义角色,这里假设有管理员和普通用户两种角色
admin_role = RoleNeed('admin')
user_role = RoleNeed('user')

# 定义权限
admin_permission = Permission(admin_role)
user_permission = Permission(user_role)

# 定义 Identity,需要通过 Identity 的认证才能访问需要权限管理的路由
@app.before_request
def before_request():
    identity = Identity(anonymous=True)
    if current_user.is_authenticated:
        identity = Identity(current_user.id)
        if current_user.is_admin:
            identity.provides.add(admin_role)
        else:
            identity.provides.add(user_role)
    principal.identity = identity

# 在需要受权限控制的路由上使用 requires(permission) 装饰器
@app.route('/admin')
@admin_permission.require(http_exception=403)
def admin_index():
    return 'Hello, Admin!'

@app.route('/user')
@user_permission.require(http_exception=403)
def user_index():
    return 'Hello, User!'

示例代码中,定义了两个 Role,即 admin_role 和 user_role。每个 Role 均可定义一个 Permission,用于控制相关操作访问需求的权限。在 before_request 函数中,实现了 Identity 的认证,并根据具体情况加入不同的 Role。在需要权限管理的路由上使用 requires(permission) 装饰器即可实现权限控制。

Flask提供了很多用于实现用户身份验证和授权的方法。掌握这些方法可以帮助开发者提高Web应用程序的安全性。同时,开发者也需要仔细考虑使用哪种方法来实现用户身份验证和授权,以保证应用程序的安全性和用户数据的保护。

相关专题

更多
Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

85

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

71

2025.12.15

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

356

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

410

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

1850

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1986

2024.08.16

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

42

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

74

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

23

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python Web框架Flask进阶视频教程
Python Web框架Flask进阶视频教程

共12课时 | 2.9万人学习

Python Web框架Flask入门视频教程
Python Web框架Flask入门视频教程

共7课时 | 2.6万人学习

Flask实战视频教程
Flask实战视频教程

共9课时 | 2.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号