【Python】Python Flask token身份认证(附完整代码)

简介: 【Python】Python Flask token身份认证(附完整代码)

前言


Python Flask是一个使用Python编写的轻量级Web应用框架,它可以非常方便地搭建Web应用。在Web应用中,经常需要进行身份认证,以确保只有授权用户才能访问某些资源。本文将介绍如何使用token进行身份认证,以及如何在Python Flask中实现token身份认证。


一、什么是token身份认证


token身份认证(Token-based authentication)是一种常见的Web身份认证方式,它是利用token来确保用户的身份。每个用户在登录后都会得到一个token,通过该token来识别用户的身份,这种方式可以减少服务器的负担,提高身份认证的效率。在使用token身份认证时,用户成功登录后,服务器会生成一个token,将该token发送给客户端。客户端在后续的请求中,需要在请求头中携带该token,以便服务器可以识别用户的身份。服务器接收到请求后,会从token中解析出用户的身份信息,并对该用户进行身份认证。


二、如何实现token身份认证


在Python Flask中,实现token身份认证需要以下步骤:


1、安装所需的依赖


flask flask_jwt_extended


可以使用pip命令来安装:

pip install flask
pip install flask_jwt_extended

2、创建一个Flask应用


在Python代码中引用flask库,并创建一个Flask应用:

from flask import Flask
 
app = Flask(__name__)


3、配置密钥


需要在Flask应用中配置一个密钥secret_key,用于生成token和验证token的有效性。可以在Flask应用中添加如下代码:

app.config['JWT_SECRET_KEY'] = 'my_secret_key'

其中,'my_secret_key'可以替换成其他随机字符串。


4、创建用户登录接口


在Flask应用中,需要创建一个接口,用于用户登录,用户输入正确的用户名和密码后,生成一个token,返回给客户端。可以在Flask应用中添加如下代码:

from flask import request, jsonify
from flask_jwt_extended import create_access_token
 
@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username', None)
    password = request.json.get('password', None)
 
    if username != 'admin' or password != 'admin':
        return jsonify({"msg": "Bad username or password"}), 401
 
    access_token = create_access_token(identity=username)
    return jsonify(access_token=access_token), 200

其中,'/login'是接口路径,使用POST方法,接收用户名和密码。如果用户名或密码错误,则返回401状态码和错误提示。如果用户名和密码正确,则使用create_access_token方法生成一个token,该token的有效期默认设置为15分钟。


5、创建需要身份认证的接口


在Flask应用中,有些接口需要进行身份认证才能访问,可以使用@jwt_required装饰器来实现。可以在Flask应用中添加如下代码:

from flask_jwt_extended import jwt_required, get_jwt_identity
 
@app.route('/protected', methods=['GET'])
@jwt_required()
def protected():
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200

其中,'/protected'是需要身份认证的接口路径,使用GET方法。使用@jwt_required装饰器来表示需要进行token身份认证。在接口中,可以使用get_jwt_identity()方法获取当前用户的身份信息。


6、启动Flask应用


在Python代码中添加如下代码,启动Flask应用:

if __name__ == '__main__':
    app.run(debug=True)

三、完整代码示例


from flask import Flask, request, jsonify
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity
 
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'my_secret_key'
 
@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username', None)
    password = request.json.get('password', None)
 
    if username != 'admin' or password != 'admin':
        return jsonify({"msg": "Bad username or password"}), 401
 
    access_token = create_access_token(identity=username)
    return jsonify(access_token=access_token), 200
 
@app.route('/protected', methods=['GET'])
@jwt_required()
def protected():
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200
 
if __name__ == '__main__':
    app.run(debug=True)


四、总结


本文介绍了如何在Python Flask中使用token进行身份认证。通过以上步骤,可以快速地搭建一个基于token的身份认证系统。在实际应用中,还需要考虑如何管理token的有效性、token的过期时间等问题。

目录
打赏
0
0
0
0
34
分享
相关文章
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
64 6
实战指南:通过1688开放平台API获取商品详情数据(附Python代码及避坑指南)
1688作为国内最大的B2B供应链平台,其API为企业提供合法合规的JSON数据源,直接获取批发价、SKU库存等核心数据。相比爬虫方案,官方API避免了反爬严格、数据缺失和法律风险等问题。企业接入1688商品API需完成资质认证、创建应用、签名机制解析及调用接口四步。应用场景包括智能采购系统、供应商评估模型和跨境选品分析。提供高频问题解决方案及安全合规实践,确保数据安全与合法使用。立即访问1688开放平台,解锁B2B数据宝藏!
【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
本文介绍如何使用Python SDK为中国区微软云(China Azure)中的虚拟机磁盘创建快照。通过Azure Python SDK的Snapshot Class,指定`location`和`creation_data`参数,使用`Copy`选项从现有磁盘创建快照。代码示例展示了如何配置Default Azure Credential,并设置特定于中国区Azure的`base_url`和`credential_scopes`。参考资料包括官方文档和相关API说明。
|
2月前
|
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
78 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
3月前
|
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
86 33
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
60 10
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
120 8
|
3月前
|
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
76 11
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等