自定义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 相关文章推荐
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
对numpy中array和asarray的区别详解
Apr 17 Python
python使用代理ip访问网站的实例
May 07 Python
Python实现随机漫步功能
Jul 09 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
浅谈Tensorflow 动态双向RNN的输出问题
Jan 20 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
Python表达式的优先级详解
Feb 18 Python
django模板获取list中指定索引的值方式
May 14 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
Python中random模块常用方法的使用教程
Oct 04 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
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
PHP全局变量与超级全局变量区别分析
2016/04/01 PHP
Smarty保留变量用法分析
2016/05/23 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
js实现图片360度旋转
2017/01/22 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
JavaScript实现单点登录的示例
2020/09/23 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中的super用法详解
2015/05/28 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
用Python写一个自动木马程序
2019/09/17 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
python 命名规范知识点汇总
2020/02/14 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
python 穷举指定长度的密码例子
2020/04/02 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
python绘制汉诺塔
2021/03/01 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
小平您好观后感
2015/06/09 职场文书
导游词之西安大清真寺
2019/12/17 职场文书