自定义Django_rest_framework_jwt登陆错误返回的解决

作者:v馒头 时间:2021-02-27 22:07:32 

在使用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登陆错误返回的解决

来源:https://blog.csdn.net/qq_29175605/article/details/100556939

标签:Django,rest,framework,jwt,登陆错误
0
投稿

猜你喜欢

  • python实现串口自动触发工作的示例

    2023-11-06 22:19:09
  • ASP分段读取数据库代码

    2009-10-12 12:28:00
  • python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等

    2023-08-27 07:55:11
  • XMLHttpRequest的浏览器兼容代码写法

    2008-09-02 10:46:00
  • 对mysql表进行优化、分析、检查和修复的说明

    2010-04-22 16:28:00
  • ASP 连接mysql信息(strConnString)

    2009-10-29 12:02:00
  • Python使用matplotlib和pandas实现的画图操作【经典示例】

    2023-03-24 16:07:16
  • php投票系统之增加与删除投票(管理员篇)

    2023-10-14 09:44:53
  • Python下的Softmax回归函数的实现方法(推荐)

    2022-02-13 10:42:17
  • SQL Server数据库备份多种方法

    2008-11-24 15:27:00
  • golang gorm中格式化时间问题详解

    2023-07-12 09:45:21
  • ASP程序种如何调用DLL文件

    2008-01-15 19:12:00
  • python如何通过psutil获取服务器cpu、内存、磁盘使用率

    2022-11-07 01:01:29
  • WEB手绘稿常用元素 之 箭头

    2009-05-08 12:33:00
  • 记录一篇关于redux-saga的基本使用过程

    2023-07-15 16:43:19
  • Select下拉列表控件美化

    2008-11-12 12:55:00
  • 淘宝首页代码调整

    2011-04-22 12:44:00
  • MySQL数据库性能优化的八大“妙手”

    2009-07-30 08:58:00
  • golang实践-第三方包为私有库的配置方案

    2023-06-25 06:05:32
  • MySQL表设计优化与索引 (三)

    2010-10-25 20:05:00
  • asp之家 网络编程 m.aspxhome.com