自定义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使用新浪微博api上传图片到微博示例
Jan 10 Python
在Django中同时使用多个配置文件的方法
Jul 22 Python
mysql 之通过配置文件链接数据库
Aug 12 Python
python在非root权限下的安装方法
Jan 23 Python
python使用turtle库绘制树
Jun 25 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
python基于property()函数定义属性
Jan 22 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
python datetime时间格式的相互转换问题
Jun 11 Python
Python生成器generator原理及用法解析
Jul 20 Python
Jupyter Notebook安装及使用方法解析
Nov 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引用
2015/02/22 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
js 省地市级联选择
2010/02/07 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
python中私有函数调用方法解密
2016/04/29 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
办公室文员岗位职责
2015/02/04 职场文书
保护校园环境倡议书
2015/04/28 职场文书
golang日志包logger的用法详解
2021/05/05 Golang