自定义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中基于生成器的状态机
Apr 13 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
PyTorch学习笔记之回归实战
May 28 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
Dec 31 Python
Python 分享10个PyCharm技巧
Jul 13 Python
对django的User模型和四种扩展/重写方法小结
Aug 17 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
用什么库写 Python 命令行程序(示例代码详解)
Feb 20 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
Python logging日志模块 配置文件方式
Jul 12 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
是否存在第一台收音机的说法
2021/03/01 无线电
php.ini中文版
2006/10/09 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
vue实现评价星星功能
2020/06/30 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
python实现无证书加密解密实例
2014/10/27 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python语言进阶知识点总结
2019/05/28 Python
python 日期排序的实例代码
2019/07/11 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
佳能英国官方网站:Canon UK
2017/08/08 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
幼儿园庆六一游园活动方案
2014/01/29 职场文书
干部作风建设工作总结
2014/10/29 职场文书
车位出租协议书范本
2016/03/19 职场文书
python超详细实现完整学生成绩管理系统
2022/03/17 Python