在Django中使用PyJWT实现登录及验证功能

目录

1、安装PyJWT

2、对信息加密及解密

3、配置登录视图和及url

4、登录装饰器

5、在验证有登录权限的的视图中登录


PyJWT的使用

1、安装PyJWT

pip isntall pyjwt

2、对信息加密及解密

import jwt
import datetime
from jwt import exceptions# 加密盐
JWT_SALT = "ds()udsjo@jlsdosjf)wjd_#(#)$"def create_token(payload, timeout=20):# 声明类型,声明加密算法headers = {"type": "jwt","alg": "HS256"}# 设置过期时间payload['exp'] = datetime.datetime.utcnow() + datetime.timedelta(minutes=36000)result = jwt.encode(payload=payload, key=JWT_SALT, algorithm="HS256", headers=headers).decode("utf-8")# 返回加密结果return resultdef parse_payload(token):"""用于解密:param token::return:"""result = {"status": False, "data": None, "error": None}try:# 进行解密verified_payload = jwt.decode(token, JWT_SALT, True)result["status"] = Trueresult['data'] = verified_payloadexcept exceptions.ExpiredSignatureError:result['error'] = 'token已失效'except jwt.DecodeError:result['error'] = 'token认证失败'except jwt.InvalidTokenError:result['error'] = '非法的token'return result

3、配置登录视图和及url

class LoginView(View):"""登录"""def post(self, request):data_dict = json.loads(request.body.decode())username = data_dict.get('username', None)password = data_dict.get('password', None)user = authenticate(request, username=username, password=password)  # 用户名密码认证if user is not None:token = create_token({"username": username})  # jwt加密生成tokenreturn JsonResponse({"status": 200, "token": token})else:return JsonResponse({"status": 400, "error": "用户名密码错误"})

在登录成功后会返回一个token

4、登录装饰器

用于验证用户是否登录成功

def decorator_login_require(func):"""登录装饰器"""def wrapper(request, *args, **kwargs):authorization = request.META.get('HTTP_AUTHORIZATION', '')  # 获取Headers里的Authorization值if authorization:payload = parse_payload(authorization)  # 解密tokenstatus = payload['status']if status:username = payload['data']['username']user = UserProfile.objects.filter(username=username).first()  # 解密后查询if user:request.user = userreturn func(request, *args, **kwargs)else:return JsonResponse({"status": 401, "msg": payload['error']})return JsonResponse({"status": 401, "msg": "对不起,您还未登录"})return wrapper

5、在验证有登录权限的的视图中登录

将decorator_login_require装饰器装饰在类视图的post方法上

class OnlyLoginCanView(View)"""只有登录的用户才能访问的视图"""@method_decorator(decorator_login_require)def post(self, request):# 具体的功能逻辑return JsonResponse({"status": 200, "msg": "成功"})

配置OnlyLoginCanView类视图的url后在请求时在Headers里需要添加参数名为Authorization值为登录时返回的token值登录,否则不能访问该视图

成功时

 当传入的Authorization值不是登录时返回的token值时不能成功登录

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

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

相关文章

腾讯云轻量服务器地域选择教程,2024最新地域选择攻略

腾讯云服务器地域怎么选择?不同地域之间有什么区别?腾讯云哪个地域好?地域选择遵循就近原则,访客距离地域越近网络延迟越低,速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素,地域节点选择…

Android 异常重启--踩坑归来--干货篇

如果你未对自己的app进行过处理,那么线上各种偶发莫名其妙的闪退、白屏、数据丢失,请检查一下是否因此而引发的。 起因 异常重建指的是非配置变更情况下导致的 Activity 重新创建。 常见场景大多是因为内存等资源不足,从而导致后台应用被系…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:XComponent)

可用于EGL/OpenGLES和媒体数据写入,并显示在XComponent组件。 说明: 该组件从API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 构造参数type为"surface"时不支持。 从API version …

VsCode 使用密钥连接 Centos

在 centos 下生成密钥 ssh-keygen 执行上述命令后,一路回车,直到出现如下界面: 查看密钥生成情况 cd /root/.ssh ls 结果如下所示: 服务器上安装公钥 cd /root/.ssh cat id_rsa.pub >> authorized_keys ls >查看确…

Covalent Network(CQT)与 Celo 集成,推动 Web3 下一代现实资产解决方案的发展

Covalent Network(CQT)是一个统一的区块链 API 提供商,其已正式与 Celo 集成,Celo 是一个以移动优先的 EVM 兼容链。这一重要的里程碑旨在提升 Celo 生态系统中开发者的能力,通过授予他们访问关键链上数据的权限&#…

Python | Bootstrap图介绍

在进入Bootstrap 图之前,让我们先了解一下Bootstrap(或Bootstrap 抽样)是什么。 Bootstrap 抽样(Bootstrap Sampling):这是一种方法,我们从一个数据集中重复地取一个样本数据来估计一个总体参数…

Qt教程 — 3.1 深入了解Qt 控件:Buttons按钮

目录 1 Buttons按钮简介 1.1 Buttons按钮简介 1.2 Buttons按钮如何选择 2 如何使用Buttons按钮 2.1 QPushButton使用-如何自定义皮肤 2.2 QToolButton使用-如何设置帮助文档 2.3 QRadioButton使用-如何设置开关效果 2.4 QRadioButton使用-如何设置三态选择框 2.5 QCom…

学习使用postman软件上传文件发起api接口请求

学习使用postman软件上传文件发起api接口请求 设置headers头信息设置body 设置headers头信息 如图设置: KEY:Content-Type VALUE:multipart/form-data 设置body 设置需要上传的key对应的类型为File,上传类型 设置需要上传的文件…

留学生课设|R语言|研究方法课设

目录 INSTRUCTIONS Question 1. Understanding Quantitative Research Question 2. Inputting data into Jamovi and creating variables (using the dataset) Question 3. Outliers Question 4. Tests for mean difference Question 5. Correlation Analysis INSTRUCTIO…

如何安装ES

Elasticsearch入门安装 ES的官方地址:Elasticsearch 平台 — 大规模查找实时答案 | Elastic 我们进到网页可以看到platform(平台) 我们可以看到Elasticsearch logstash kibanba beats 这几个产品 Elasticsearch:分布式&…

某夕夕商品数据抓取逆向之webpack扣取

逆向网址 aHR0cHM6Ly93d3cucGluZHVvZHVvLmNvbQ 逆向链接 aHR0cHM6Ly93d3cucGluZHVvZHVvLmNvbS9ob21lL2JveXNoaXJ0 逆向接口 aHR0cHM6Ly9hcGl2Mi5waW5kdW9kdW8uY29tL2FwaS9naW5kZXgvdGYvcXVlcnlfdGZfZ29vZHNfaW5mbw 逆向过程 请求方式:GET 参数构成 【anti_content】…

基于Transformer的经典目标检测之DETR

背景 DETR,即DEtection TRansformer,是由尼古拉斯卡里翁及其团队于2020年在Facebook AI Research首次提出的,它在目标检测领域开创了一种新的波潮。 虽然目前并未保持最先进(State Of The Art)的地位,但DET…

vr虚拟现实游戏世界介绍|数字文化展览|VR元宇宙文旅

虚拟现实(VR)游戏世界是一种通过虚拟现实技术创建的沉浸式游戏体验,玩家可以穿上VR头显,仿佛置身于游戏中的虚拟世界中。这种技术让玩家能够全方位、身临其境地体验游戏,与游戏中的环境、角色和物体互动。 在虚拟现实游…

IP在网络通信中的重要作用

IP,全称Internet Protocol,即网际互连协议,是TCP/IP体系中的网络层协议。IP作为整个TCP/IP协议族的核心,是构成互联网的基础。它的作用重大且深远,下面将详细阐述IP的定义及其在网络通信中的重要作用。 首先&#xff0…

SpringBoot中的配置文件优先级、bootstrap和application的区别

SpringBoot中的配置文件优先级 SpringBoot项目当中支持的三类配置文件: application.properties application.yml application.yaml 在SpringBoot项目当中,我们要想配置一个属性,可以通过这三种方式当中的任意一种来配置都可以&#xff0…

Elastic Agent 的安装及使用

概述 Elastic Agent是Elastic Stack中的一个全新组件,旨在简化和统一监控和集成管理流程。它是一个轻量级的代理,可以部署到各种不同类型的主机和容器中,用于收集系统指标、日志和事件数据,并将其发送到Elasticsearch进行存储和分…

SpringBoot(自定义转换器+处理Json+内容协商)

文章目录 1.自定义转换器1.代码实例1.save.html2.编写两个bean1.Car.java2.Monster.java 3.WebConfig.java 配置类来自定义转换器4.测试 2.注意事项和细节1.debug查看转换器总数1.打断点2.执行到断点后,选左边的1923.可以看出,加上自定义的转换器一共125…

分类预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据分类预测

分类预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据分类预测 目录 分类预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GSWOA-KELM分类&#xff0…

react04- mvc 、 mvvm

MVC与MVVM stackoverflow论坛网站 react前端框架 使用框架前: 操作dom > js获取dom元素,事件侦听,修改数据,设置样式。。。 操作dom问题: 直接操作dom,会造成大量的回流、重绘,消耗大量性能操作起来也…

论文阅读——RingMo

RingMo: A Remote Sensing Foundation Model With Masked Image Modeling 与自然场景相比,RS图像存在以下困难。 1)分辨率和方位范围大:受遥感传感器的影响,图像具有多种空间分辨率。此外,与自然图像的实例通常由于重…