自定义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插入排序算法的实现代码
Nov 21 Python
python重试装饰器示例
Feb 11 Python
Python写的服务监控程序实例
Jan 31 Python
Python通过select实现异步IO的方法
Jun 04 Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 Python
详解Python3中字符串中的数字提取方法
Jan 14 Python
requests和lxml实现爬虫的方法
Jun 11 Python
简单了解Django模板的使用
Dec 20 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
python三大神器之fabric使用教程
Jun 10 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 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
php自动适应范围的分页代码
2008/08/05 PHP
PHP 采集程序原理分析篇
2010/03/05 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
php利用array_search与array_column实现二维数组查找
2019/07/08 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
js的写法基础分析
2011/01/17 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
python urllib爬取百度云连接的实例代码
2017/06/19 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
python编写简单端口扫描器
2019/09/04 Python
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
社区党建工作汇报材料
2014/08/14 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
党内外群众意见范文
2015/06/02 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
2016小学新学期寄语
2015/12/04 职场文书
趣味运动会标语口号
2015/12/26 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
Java实现简单小画板
2022/06/10 Java/Android