自定义Django_rest_framework_jwt登陆错误返回的解决


Posted in Python onOctober 18, 2020

在使用Django做前端后端项目时,登陆认证方法往往使用的是jwt_token,但是想自定义登陆成功和失败的返回体。

1.当用户名和密码正确就会生成token,返回response是调用的是JWT_RESPONSE_PAYLOAD_HANDLER,如果想自定义返回体就需要重写jwt_response_payload_handler函数。

在项目目录下settings.py中,添加JWT_RESPONSE_PAYLOAD_HANDLER

JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=6000),
  'JWT_RESPONSE_PAYLOAD_HANDLER': 'Users.views.jwt_response_payload_handler',  # 后面跟着你视图里定义函数
}

自定义一个视图编辑jwt_response_payload_handler

def jwt_response_payload_handler(token, user=None, request=None):
  """
  设置jwt登陆返回的格式
  :param token:
  :param user:
  :param request:
  :return:
  """
  return {
    "msg": "success",
    "status": 200,
    "data": [{
    	# data自定义你接口想返回的信息
      'token': token,
      'username': user.username
    }]
  }

现在的效果如下:

自定义Django_rest_framework_jwt登陆错误返回的解决 

2. Django中jwt错误返回的是{"non_field_errors":["无法使用提供的认证信息登录。"]},当用户名或密码错误时,是不会去调用jwt_response_payload_handler,那么失败时调用的是什么函数了,JWT_RESPONSE_PAYLOAD_ERROR_HANDLER,但是发现这个方法并没有合到master分支,那么我们就需要手动给他合并进去。

我们打开/usr/local/lib/python3.6/site-packages/rest_framework_jwt/settings.pyIMPORT_STRINGS中添加JWT_RESPONSE_PAYLOAD_ERROR_HANDLER:

自定义Django_rest_framework_jwt登陆错误返回的解决

/usr/local/lib/python3.6/site-packages/rest_framework_jwt/views.py中修改:

自定义Django_rest_framework_jwt登陆错误返回的解决

我们在自己的视图里编写一个jwt_response_payload_error_handler函数

def jwt_response_payload_error_handler(serializer, request = None):
  return {
    "msg": "用户名或者密码错误",
    "status": 400,
    "detail": serializer.errors
  }

最后我们在我们项目的settings.pyJWT中添加错误返回的函数:

# jwt_token配置
JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=6000),
  # 登陆成功自定义 的返回结构
  'JWT_RESPONSE_PAYLOAD_HANDLER': 'Users.views.jwt_response_payload_handler',
  # 登陆失败时自定义的返回结构
  'JWT_RESPONSE_PAYLOAD_ERROR_HANDLER': 'Users.views.jwt_response_payload_error_handler',
}

最后的样子就成为这样:

自定义Django_rest_framework_jwt登陆错误返回的解决

到此这篇关于自定义Django_rest_framework_jwt登陆错误返回的解决的文章就介绍到这了,更多相关Django_rest_framework_jwt登陆错误内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python写入xml文件的方法
May 08 Python
Python实现的rsa加密算法详解
Jan 24 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
Pycharm以root权限运行脚本的方法
Jan 19 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
Mar 14 Python
python 实现识别图片上的数字
Jul 30 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
Mar 07 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
如何利用python读取micaps文件详解
Oct 18 #Python
Python中Yield的基本用法
Oct 18 #Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 #Python
Python通过format函数格式化显示值
Oct 17 #Python
Python如何使用vars返回对象的属性列表
Oct 17 #Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 #Python
Python基于locals返回作用域字典
Oct 17 #Python
You might like
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
取得传值的函数
2006/10/27 Javascript
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
cookie的secure属性详解
2015/04/08 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
关于vue面试题汇总
2018/03/20 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
英语系毕业生求职信
2014/07/13 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
化工见习报告范文
2014/10/31 职场文书
入党积极分子个人总结
2015/03/02 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis