自定义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 不同对象比较大小示例探讨
Aug 21 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 Python
小白入门篇使用Python搭建点击率预估模型
Oct 12 Python
django中间键重定向实例方法
Nov 10 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
Python容器类型公共方法总结
Aug 19 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
python 实现定时任务的四种方式
Apr 01 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 Python
Python如何使用循环结构和分支结构
Apr 13 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中路径问题的解决方案
2006/10/09 PHP
其他功能
2006/10/09 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
javascript常用函数(1)
2015/11/04 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
详解React 元素渲染
2020/07/07 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
python爬虫之自制英汉字典
2019/06/24 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
2020/06/01 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
教师党员岗位承诺书
2014/05/29 职场文书
行风评议整改报告
2014/11/06 职场文书
2015年预算员工作总结
2015/05/14 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS