当前位置: 首页 > news >正文

Flask中基于Token的身份认证

Flask提供了多种身份认证方式,其中基于Token的身份认证是其中一种常用方式。基于Token的身份认证通常是在用户登录之后,为用户生成一个Token,然后在每次请求时用户将该Token作为请求头部中的一个参数进行传递,服务器端在接收到请求后验证该Token是否有效。

下面是基于Token的身份认证的具体实现步骤:

  1. 在用户登录成功之后,为该用户生成一个Token,通常使用jwt库进行生成。

  2. 将该Token返回给客户端,客户端需要将该Token存储起来,例如可以将该Token保存在浏览器的Cookie中,或者使用本地存储。

  3. 当客户端发送请求时,需要将该Token作为请求头部中的一个参数进行传递,例如可以将该Token放在Authorization字段中,例如Authorization: Bearer <Token>

  4. 服务器端在接收到请求时,从请求头部中获取该Token,并验证该Token是否有效。验证方法通常是使用jwt库进行验证,例如验证Token的有效期、签名等等。

  5. 如果Token验证成功,则认为该请求是合法的,可以继续处理;如果Token验证失败,则返回401 Unauthorized状态码。

下面是一个基于Token的身份认证的示例代码:

from flask import Flask, request, jsonify
from flask_jwt_extended import create_access_token, jwt_required, JWTManager, get_jwt_identityapp = Flask(__name__)app.config['JWT_SECRET_KEY'] = 'super-secret'
jwt = JWTManager(app)users = {'john': 'password','susan': 'strongpassword'
}@app.route('/login', methods=['POST'])
def login():username = request.json.get('username', None)password = request.json.get('password', None)if not username or not password:return jsonify({"msg": "缺少用户名或密码"}), 400if username not in users:return jsonify({"msg": "未找到用户"}), 404if users[username] != password:return jsonify({"msg": "用户名或密码错误"}), 401access_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

这个例子中,/login 接口用来验证用户的用户名和密码,并生成一个 Token,/protected接口用了 @jwt_required()装饰器,表示只有在请求头中包含 Token 的请求才会通过身份验证。create_access_token 用来生成 Token,get_jwt_identity 用来获取当前用户的用户名。

客户端请求示例:

1.登录,获取 Token:

curl -X POST \http://localhost:5000/login \-H 'Content-Type: application/json' \-d '{"username": "john","password": "password"
}'
  1. 发送包含 Token 的请求:
curl -X GET http://localhost:5000/protected -H 'Authorization: Bearer <token>'

其中<token>是登录时获取到的Token。


  • 📢博客主页:https://blog.csdn.net/qq233325332
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 陌北V1 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

相关文章:

Flask中基于Token的身份认证

Flask提供了多种身份认证方式&#xff0c;其中基于Token的身份认证是其中一种常用方式。基于Token的身份认证通常是在用户登录之后&#xff0c;为用户生成一个Token&#xff0c;然后在每次请求时用户将该Token作为请求头部中的一个参数进行传递&#xff0c;服务器端在接收到请求…...

波奇学数据结构:时间复杂度和空间复杂度

数据结构&#xff1a;计算机存储&#xff0c;组织数据方式。数据之间存在多种特定关系。时间复杂度&#xff1a;程序基本操作&#xff08;循环等&#xff09;执行的次数大O渐进法表示法用最高阶的项来表示&#xff0c;且常数变为1。F&#xff08;n&#xff09;3*n^22n1//F(n)为…...

移动OA办公系统为企业带来便捷办公

移动OA系统是指企业员工同手机等移动设备来使用OA办公系统&#xff0c;在外出差的员工只需要通过OA系统的手机APP就可以接收相关的新信息。PC办公与移动OA办公的相结合&#xff0c;构建用户单位随时随地办公的一体化环境。 相比PC办公&#xff0c;移动OA办公给企业带来更多的便…...

什么是Type-c口?Type-c口有什么优势?

什么是Type-C接口 Type-C接口有哪些好处坏处 说起“Type-C”&#xff0c;相信大家都不会陌生&#xff0c;因为最近拿它大做文章的厂商着实不少&#xff0c;但要具体说清楚Type-C是什么&#xff0c;估计不少人只能说出“可以正反插”“USB的一种”之类的大概。其实&#xff0c;T…...

Go开发者常犯的错误,及使用技巧 (1)

代码规范 命名不规范 变量名要有意义&#xff0c;不能随便取a,b,c 如果只是纯粹的算法题&#xff0c;这样问题不大。但工程上的代码可读性要求较高&#xff0c;不能随意命名变量名&#xff0c;例如&#xff1a; for _, v : range userList {// ... }如果for语句块简短还好&…...

Servlet 作业

一、填空题1. Servlet 中使用Session 对象的步骤为&#xff1a;调用HttpServletRequest.getSession()的得到Session对象&#xff0c;查看Session对象&#xff0c;在会话中保存数据。2. http 全称是_HyperText Transfer Protocol3. 用户可以有多种方式请求Servlet&#xff0c;如…...

Hive高阶函数:explode函数、Lateral View侧视图、聚合函数、增强聚合

Hive高阶函数 文章目录Hive高阶函数explode函数Lateral View侧视图原理语法聚合函数增强聚合grouping setsCUBEROLL UPexplode函数 explode接收map、array类型的数据作为输入&#xff0c;然后把输入数据中的每个元素拆开变成一行数据&#xff0c;一个元素一行。explode执行效果…...

信息系统服务管理

一、信息系统服务业及发展二、信息系统工程监理的概念及发展三、信息系统运行维护的概念和发展 IT服务管理&#xff08;ITSM) 四、信息技术服务管理的标准和框架 IT服务标准体系&#xff08;ITSS&#xff09; 一、信息系统服务业及发展 总结&#xff1a;前景很好 二、信息系…...

Windows10 安装ElasticStack8.6.1

一、安装ElasticSearch8.6.1 1.官网下载ElasticSearch8.6.1压缩包后解压 2.安装为服务 elasticsearch-service.bat install 3.运行 elasticsearch-service.bat start 4.通过浏览器访问 http://localhost:9200/ 提示需要登录&#xff0c;但不知密码是啥。 5.重置密码 ela…...

gRPC 非官方教程

一、 简介 gRPC的定义&#xff1a; 一个高性能、通用的开源RPC框架主要面向移动应用开发&#xff1a; gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。基于HTTP/2协议标准而设计&#xff0c;基于ProtoBuf(Protoc…...

6.2【人工智能与深度学习】RNN、GRU、远程服务管理、注意力、Seq2 搜索引擎和内存网络

【人工智能与深度学习】RNN、GRU、远程服务管理、注意力、Seq2 搜索引擎和内存网络底层原理介绍 深度学习架构循环神经网络(RNN)循环网络:摊开循环的网络的循环循环神经网络的技巧乘法模组注意模组门控循环单元(GRU)长期短期记忆(Long Short-Term Memory,简称LSTM)序列到序列…...

软件工程复习

软件工程简介 软件&#xff1a; -在执行时提供所需的功能和性能的指令&#xff1b; -使程序能够充分操作信息的数据结构&#xff1b; -描述这些程序的操作和使用情况的文档。 软件定义&#xff1a;计算机程序和相关文档。 软件特点&#xff1a;软件没有质量&#xff1b;它并不…...

将Nginx 核心知识点扒了个底朝天(二)

Nginx 是如何实现高并发的&#xff1f; 如果一个 server 采用一个进程(或者线程)负责一个request的方式&#xff0c;那么进程数就是并发数。那么显而易见的&#xff0c;就是会有很多进程在等待中。等什么&#xff1f;最多的应该是等待网络传输。 而 Nginx 的异步非阻塞工作方…...

【PowerQuery】PowerBI 的PowerQuery支持的数据集成

PowerBI中的各个Power组件已经被深度集成到PowerBI中,不再作为像Excel一样的独立组件而存在。在PowerBI的界面中为了快速导入这些常用的数据,也有相应的快速导入界面。PowerBI的快速导入界面位于主页面中,下图就是PowerBI的快速导入界面。 在PowerBI中的数据导入界面相比Exc…...

scipy spatial transform Rotation库的源代码

前几日研究scipy的旋转&#xff0c;不知道具体里面怎么实现的&#xff0c;因此搜索一番。 发现Rotation在scipy的表达是用四元数的 https://github.com/jgagneastro/coffeegrindsize/edit/master/App/dist/coffeegrindsize.app/Contents/Resources/lib/python3.7/scipy/spatia…...

JAVA文件操作

JAVA文件操作 文章目录JAVA文件操作1.属性2.构造方法3.方法3.1创建文件3.2 文件删除3.3创建目录3.4文件名3.5 文件重命名3.6查看文件的可读性​ Java中通过 java.io.file类来对文件(目录)进行抽象的描述。注意&#xff0c; 有File对象时&#xff0c;不代表真实存在该文件。1.属…...

字符串匹配 - 模式预处理:BM 算法 (Boyer-Moore)

各种文本编辑器的"查找"功能&#xff08;CtrlF&#xff09;&#xff0c;大多采用Boyer-Moore算法&#xff0c;效率非常高。算法简介在 1977 年&#xff0c;Robert S. Boyer (Stanford Research Institute) 和 J Strother Moore (Xerox Palo Alto Research Center) 共…...

RV1126笔记三十:freetype显示矢量字体

若该文为原创文章,转载请注明原文出处。 在前面介绍了使用取模软件,可以自定义OSD,这种做法相对不灵活,也无法变更,适用大部分场景。 如果使用opencv需要移植opencv,芯片资源相对要相比好,而且移植比freetype复杂。 这里记录下如何使用freetype显示矢量字体,使用fre…...

polkit pkexec 本地提权漏洞修复方案

polkit pkexec 本地提权漏洞 漏洞细节&#xff0c;polkit pkexec 中对命令行参数处理有误&#xff0c;导致参数注入&#xff0c;能够导致本地提权。 解决建议 1、无法升级软件修复包的&#xff0c;可使用以下命令删除pkexec的SUID-bit权限来规避漏洞风险&#xff1a; chmod 0…...

es-06聚合查询

聚合查询 概念 聚合&#xff08;aggs&#xff09;不同于普通查询&#xff0c;是目前学到的第二种大的查询分类&#xff0c;第一种即“query”&#xff0c;因此在代码中的第一层嵌套由“query”变为了“aggs”。用于进行聚合的字段必须是exact value&#xff0c;分词字段不可进行…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...