flask处理token的装饰器

以下是在 Flask 中基于 token 实现的登录验证装饰器的示例代码:

import jwt
from functools import wraps
from flask import request, jsonify, current_appdef login_required(f):@wraps(f)def decorated_function(*args, **kwargs):token = request.headers.get('Authorization')if not token:return jsonify({'message': 'Missing token'}), 401try:data = jwt.decode(token, current_app.config['SECRET_KEY'], algorithms=['HS256'])current_user = data['username']except Exception as e:return jsonify({'message': 'Invalid token'}), 401return f(current_user, *args, **kwargs)return decorated_function

该装饰器首先检查请求头中是否存在 Authorization 字段,并解码其中的 token。如果没有找到 token,则返回一个包含错误消息的 JSON 响应。如果找到了 token,则使用 JWT 对其进行解码,同时使用 Flask 的 current_app 对象获取 SECRET_KEY。如果解码成功,那么装饰器会将解码出来的用户名传递给被装饰函数。如果解码失败,则返回一个包含错误消息的 JSON 响应。可以在需要登录验证的视图函数上添加该装饰器,例如:

@app.route('/protected')
@login_required
def protected(current_user):return jsonify({'message': 'This is a protected endpoint for user {}'.format(current_user)})

在上述代码中,protected 视图函数被 @login_required 装饰器进行修饰,当用户成功登录后,该视图函数会返回一个包含当前用户信息的 JSON 响应。需要注意的是,已经登录的用户才能访问该视图函数,否则将返回一个包含错误消息的 JSON 响应。

不过以上内容中涉及了解密参数,如果token并未进行加密可以按照如下方式写:

from functools import wraps
from flask import request, jsonify
def login_required_token(f):@functools.wraps(f)def decorated_function(*args, **kwargs):token = request.headers.get('Authorization')if not token:return jsonify({'message': 'Missing token'}), 401return f(*args, **kwargs)return decorated_function
@app.route('/logaudit/program/', methods=["POST"])
@login_required_token
def program_log():# print("#"*50)# print("current user is:",current_user)return makeresponse("首页")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/32069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解设计模式面经

1 讲讲工厂方法模式, 1.1 给我一个java的demo 工厂方法模式是一种创建型设计模式,它提供了一个接口用于创建对象,但允许子类修改将要创建的对象类型。这种模式抽象了对象的创建过程,使得代码可以在不知道创建的对象具体类的情况…

利用状态监测和机器学习提高冷却塔性能的具体方法

在现代工业生产中,冷却塔扮演着至关重要的角色,它们的性能直接影响着工艺流程的稳定性和效率。为了确保冷却塔的正常运行和减少系统故障,状态监测和机器学习成为了关键技术。 图.冷却塔(PreMaint) 在前文《基于人工智…

MySQL_约束、多表关系

约束 概念:就是用来作用表中字段的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确性,有效性和完整性。 约束演示 #定义一个学生表,表中要求如下: #sn 表示学生学号,要求使用 …

Python测试框架pytest:常用参数、查找子集、参数化、跳过

Pytest是一个基于python的测试框架,用于编写和执行测试代码。pytest主要用于API测试,可以编写代码来测试API、数据库、UI等。 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个优点: 简单灵活,容易上手。…

【input】关于input 元素的type类型及相关作用

传统类型&#xff1a; text&#xff1a;用于输入单行文本。 <input type"text" name"username">password&#xff1a;用于输入密码&#xff0c;输入的内容会被隐藏。 <input type"password" name"password">checkbox&a…

React Native 样式布局基础知识

通过此篇笔记能够学习到如下的几个知识点 在 React Native 中使用样式的一些细节了解 React Native 的 Flex 布局概念了解 React Native 的 flex 布局属性React Native 如何添加多样式属性React Native 中绝对布局和相对布局 React Native 中的 Flex 布局概念 1、主轴和交叉…

树莓派命令行运行调用音频文件的函数,不报错,没有声音解决办法

树莓派接上音频首先需要切换音频不是HDMI&#xff0c;然后可以双击运行wav文件可以播放&#xff0c;但是&#xff1a; 命令行直接运行wav文件报错&#xff1a; Playing WAVE twzc.wav : Signed 16 bit Little Endian, Rate 16000 Hz, Mono命令行运行main方法也是无法播放&am…

用excel格式书写的接口用例执行脚本

创建测试用例和测试结果集文件夹&#xff1a; excel编写的接口测试用例如下&#xff1a; 1 encoding 响应的编码格式。所测项目大部分是utf-8&#xff0c;有一个特殊项目是utf-8-sig 2 params 对应requests的params 3 data&#xff0c;对应requests的data 有些参数是动态的&a…

1034:计算三角形面积

【题目描述】 平面上有一个三角形&#xff0c;它的三个顶点坐标分别为(x1,y1),(x2,y2),(x3,y3)&#xff0c;那么请问这个三角形的面积是多少&#xff0c;精确到小数点后两位。 【输入】 输入仅一行&#xff0c;包括6个单精度浮点数&#xff0c;分别对应x1,y1,x2,y2,x3,y3。 …

java+springboot+mysql小区宠物管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的小区宠物管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;用户管理&#xff1b;宠物分类&#xff1b;宠物管理&…

Python3中typing模块

Python类型注解是Python 3.5版本之后引入的新特性&#xff0c;它可以让开发者在函数、变量等声明时为其指定类型。typing模型能够声明类型&#xff0c;防止运行时出现参数和返回值类型不符合的问题。 ### 1. 基本类型注解 def hello(name: str) -> str:return (Hello, na…

自建机房还是选择云服务器?以腾讯云为例

大企业是选择自购服务器自建机房还是使用腾讯云服务器&#xff1f;都说企业上云是趋势&#xff0c;自建机房是一次性支出&#xff0c;上云租赁云服务器等产品需要年年续费&#xff0c;大型企业有必要把数据中心迁移上云吗&#xff1f;腾讯云服务器网想说&#xff0c;自建机房购…

28 玻尔兹曼机

文章目录 28 玻尔兹曼机28.1 模型定义28.2 梯度推导28.3 梯度上升28.4 基于VI[平均场理论]求解后验概率 28 玻尔兹曼机 28.1 模型定义 玻尔兹曼机是一张无向图&#xff0c;其中的隐节点和观测节点可以有任意连接如下图&#xff1a; 我们给其中的节点、连线做出一些定义&#…

Vue 转 React 指南

JSX 先介绍 React 唯一的一个语法糖&#xff1a;JSX。 理解 JSX 语法并不困难&#xff0c;简单记住一句话&#xff0c;遇到 {} 符号内部解析为 JS 代码&#xff0c;遇到成对的 <> 符号内部解析为 HTML 代码。 当你写下这个 React 组件时&#xff1a; import React fr…

软件功能测试有什么注意事项?功能测试报告起到什么作用?

软件功能测试是软件开发过程中至关重要的一环&#xff0c;它用于评估软件功能的质量和稳定性&#xff0c;并确保软件能够按照预期进行工作。然而&#xff0c;在进行功能测试时&#xff0c;有一些注意事项需要特别关注&#xff0c;以确保测试的准确性和有效性。 一、软件功能测…

Java8 Stream 之groupingBy 分组讲解

本文主要讲解&#xff1a;Java 8 Stream之Collectors.groupingBy()分组示例 Collectors.groupingBy() 分组之常见用法 功能代码: /** * 使用java8 stream groupingBy操作,按城市分组list */ public void groupingByCity() { Map<String, List<Em…

c++继承总结

一 继承的由来 我使用类也有一段时间了&#xff0c;慢慢觉得我们做一件事时&#xff0c;就是要先描述&#xff0c;例如写一个管理系统登记学校成员的信息&#xff0c;我们就要先对在学校内的老师和学生做描述&#xff0c;学生要有年龄&#xff0c;班级&#xff0c;姓名&#xf…

使用C#加载TOOLBLOCK

前言 因为Vpp文件类型包含了以下三种 QuickBuidJobToolBlock 不同类型的打开方式不同&#xff0c;需要提前知道vpp是什么类型 例如 这个TB.vpp文件是TOOLBLOCK&#xff0c;就不能直接在visionpro中打开&#xff08;直接打开需要QuickBuid文件&#xff09;&#xff0c; 可以…

在centos7下通过docker 安装onlyoffice

因为需要调试网盘&#xff0c;所以今天安装一下centos7的onlyoffice 官方介绍如下&#xff1a; 为了方便&#xff0c;还是通过docker方式来安装onlyoffice了&#xff0c;这里我们采用社区版本了。 1、下载docker安装包 如下&#xff1a; docker pull onlyoffice/documentserv…