自定义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实现简单的多任务mysql转xml的方法
Feb 08 Python
Python线性回归实战分析
Feb 01 Python
python学生信息管理系统(完整版)
Apr 05 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
python障碍式期权定价公式
Jul 19 Python
对python3中的RE(正则表达式)-详细总结
Jul 23 Python
django多文件上传,form提交,多对多外键保存的实例
Aug 06 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
python定义具名元组实例操作
Feb 28 Python
Python list列表删除元素的4种方法
Nov 01 Python
尝试使用Python爬取城市租房信息
Apr 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
PHP 程序授权验证开发思路
2009/07/09 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
2018/05/12 PHP
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
python计数排序和基数排序算法实例
2014/04/25 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
Python安装whl文件过程图解
2020/02/18 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
学校爱国卫生月活动总结
2014/06/25 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
会议通知范文
2015/04/15 职场文书
篮球赛新闻稿
2015/07/17 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python