自定义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 02 Python
Python中的条件判断语句与循环语句用法小结
Mar 21 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
Python编程深度学习计算库之numpy
Dec 28 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
python实现抠图给证件照换背景源码
Aug 20 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
Python: 传递列表副本方式
Dec 19 Python
python 两个一样的字符串用==结果为false问题的解决
Mar 12 Python
python实现图片转字符画的完整代码
Feb 21 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
基于jquery实现多选下拉列表
2017/08/02 jQuery
详解node.js 事件循环
2020/07/22 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
Python 硬币兑换问题
2019/07/29 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
自荐信怎么写好
2013/11/11 职场文书
称象教学反思
2014/02/03 职场文书
青春演讲稿范文
2014/05/08 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
2014年校长工作总结
2014/12/11 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
Python中requests做接口测试的方法
2021/05/30 Python
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript