自定义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脚本内运行linux命令的方法
Jul 02 Python
python利用正则表达式提取字符串
Dec 08 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
Python中的取模运算方法
Nov 10 Python
Python安装Flask环境及简单应用示例
May 03 Python
Python分支语句与循环语句应用实例分析
May 07 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
Pycharm中切换pytorch的环境和配置的教程详解
Mar 13 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
Python闭包的定义和使用方法
Apr 11 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
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
jQuery chili图片远处放大插件
2009/11/30 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
python计算最小优先级队列代码分享
2013/12/18 Python
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
Python 异常处理实例详解
2014/03/12 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
Python实现的建造者模式示例
2018/08/06 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
幼儿园优秀教师事迹
2014/02/13 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
市场营销计划书
2019/04/24 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL