Django(75)django-rest-framework-simplejwt「建议收藏」

发布于2022-09-16 11:56:13阅读 2440
 

大家好,又见面了,我是你们的朋友全栈君。

前言

由于之前我们一直使用的django-rest-framework-jwt 这个库,但是作者在17年的时候就已经不再维护了(有部分bug没有解决),所以我们也就不用了,目前我们使用django-rest-framework-simplejwt

介绍

Simple JWTDjango REST Framework提供了JSON Web TOKEN身份验证。并且借鉴了DRF中的另一个JSON web token库和django-rest-framework-jwt

安装

1.使用以下pip命令安装

pip install djangorestframework-simplejwt

复制

2.然后我们在settings.py中认证类

REST_FRAMEWORK = {
...
'DEFAULT_AUTHENTICATION_CLASSES': (
...
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
...
}

复制

3.我们在根urls.py中配置路由视图TokenObtainPairViewTokenRefreshView

from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
) urlpatterns = [
...
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
...
]

复制

4.如果需要使用本地化,那么只需把rest_framework_simplejwt加入到INSTALLED_APPS

INSTALLED_APPS = [
...
'rest_framework_simplejwt',
...
]

复制

验证

最后我们使用接口工具验证simple jwt是否能正常工作,访问http://127.0.0.1:8000/api/token/

可以看到返回了accessrefresh两个token

  • access:默认5分钟的有效期
  • refresh:当access过期了,就需要传入refresh字段,重新刷新token,访问http://127.0.0.1:8000/api/token/refresh/

配置信息解释

settings.py中可以配置一些默认的信息

# Django project settings.py

from datetime import timedelta

...

SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5), # 设置token有效时间
'REFRESH_TOKEN_LIFETIME': timedelta(days=1), # 刷新token有效时间
'ROTATE_REFRESH_TOKENS': False,
'BLACKLIST_AFTER_ROTATION': False,
'UPDATE_LAST_LOGIN': False, # 设置为True会在用户登录时,更新user表中的last_login字段 'ALGORITHM': 'HS256', # 加密算法
'SIGNING_KEY': settings.SECRET_KEY, # 签名密钥
'VERIFYING_KEY': None, # 验证密钥,用于验证生成令牌的内容
'AUDIENCE': None, # 设置为None时,此字段将从token中排除,并且不会进行验证
'ISSUER': None, # 设置为None时,此字段将从token中排除,并且不会进行验证
'JWK_URL': None, # 设置为None时,此字段将从token中排除,并且在验证期间不使用
'LEEWAY': 0, # 用来给到期时间留一些余地 'AUTH_HEADER_TYPES': ('Bearer',), # 认证的标签头,类似jwt token中的jwt
'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', # 身份验证的授权标头名称
'USER_ID_FIELD': 'id',
'USER_ID_CLAIM': 'user_id', # 生成token中声明将用于存储用户标识符
'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule', 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
'TOKEN_TYPE_CLAIM': 'token_type', # 用于存储token类型的声明名称 'JTI_CLAIM': 'jti', # 用于存储令牌的唯一标识符的声明名称 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}

复制

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/165699.html原文链接:https://javaforall.cn

Django django-rest-framework-simplejwt的更多相关文章

  1. Django’s cache framework

    小结: 1.缓存存储位置:数据库.文件系统.内存 2.通过缓存前缀实现跨服务器缓存 Django’s cache framework | Django documentation | Django h ...

  2. Django之REST framework源码分析

    前言: Django REST framework,是1个基于Django搭建 REST风格API的框架: 1.什么是API呢? API就是访问即可获取数据的url地址,下面是一个最简单的 Djang ...

  3. [django]django xlrd处理xls中日期转换问题

    xlrd会把xls文件中比如20160--03-01类型的时间转换成整数,那么我们如何保证xlrd读取进来的时间为2016-03-01格式呢? 使用xlrd中的xldate_as_tuple函数 代码 ...

  4. [django]Django model中数据批量导入bulk_create()

    参考: https://www.cnblogs.com/ccorz/p/Django-model-zhong-shu-ju-pi-liang-dao-rubulkcreat.html import o ...

  5. Python3+PyCharm+Django+Django REST framework开发教程

    一.说明 自己一是想跟上潮流二是习惯于直接干三是没有人可以请教,由于这三点经常搞得要死要活.之前只简单看过没写过Diango,没看过Django REST framework,今天一步到位直接上又撞上 ...

  6. Django之Rest Framework框架

    一.什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度 ...

  7. django的rest framework框架——分页、视图、路由、渲染器

    一.rest framework的分页 1.使用rest framework内置类PageNumberPagination实现分类 from django.conf.urls import url f ...

  8. django的rest framework框架——版本、解析器、序列化

    一.rest framework的版本使用 1.版本可以写在URL中,通过GET传参,如 http://127.0.0.1:8082/api/users/?version=v1 (1)自定义类获取版本 ...

  9. django的rest framework框架——认证、权限、节流控制

    一.登录认证示例 模拟用户登录,获取token,当用户访问订单或用户中心时,判断用户携带正确的token,则允许查看订单和用户信息,否则抛出异常: from django.conf.urls impo ...

  10. django的rest framework框架——安装及基本使用

    一.django的FBV 和 CBV 1.FBV(基于函数的视图): urlpatterns = [ url(r'^users/', views.users), ] def users(request ...

随机推荐

  1. jdk8 stream部分排序方法

    List<类> list; 代表某集合   //返回 对象集合以类属性一升序排序   list.stream().sorted(Comparator.comparing(类::属性一)); ...

  2. 文件上传 upload-labs Pass-17 二次渲染

    Pass-17 审计源码 $is_upload = false; $msg = null; if (isset($_POST['submit'])){ // 获得上传文件的基本信息,文件名,类型,大小 ...

  3. Docker下部署LNMP黄金架构

    一.部署lnmp 1.网络规划 172.16.10.0/24nginx:172.16.10.10mysql:172.16.10.20php:172.16.10.30网站访问主目录:/wwwrootng ...

  4. 【打怪升级】【rocketMq】rocket的持久化

    rocket持久化保证的思想有两点:1是刷盘保证大部分数据不丢失:2是持久化文件的处理,零拷贝技术和内存页,NIO模型保证处理能力 文件持久化目录 ├──abort:rocket broker启动检查 ...

  5. gRPC之.Net6中的客户端和服务端共用proto协议文件

    1.说明 在上一篇文章gRPC之.Net6中的初步使用介绍中,我们简单的介绍了gRPC在服务端.客户端以及Web项目中的使用. 有一个问题,不知道大家发现没有,就是不管在服务端项目还是客户端项目中,我 ...

  6. 你可能需要的 6 个 React 开发小技巧

    ​ 这是一个可怕的问题,在React中,我们经常会编写条件语句来显示不同的视图,比如这个简单的例子. const App = () => { return ( <> { loadin ...

  7. 权限RBAC、RBAC0 、RBAC1、RBAC2

    https://zhuanlan.zhihu.com/p/34608415 权限系统的基本构成 权限系统主要由三个要素构成:帐号,角色,权限. 帐号是登录系统的唯一身份识别,一个账号代表一个用户.由自 ...

  8. 从头开始,手写android应用框架(一)

    前言 搭建android项目框架前,我们需要先定义要框架的结构,因为android框架本身的结构就很复杂,如果一开始没定义好结构,那么后续的使用就会事倍功半. 结构如下: com.kiba.frame ...

  9. ubuntu安装ch34x驱动,并安装串口调试助手

    1.查看系统自带的ch34x驱动 kangxubo@kangxubo-HKNS:/lib/modules/5.19.0-38-generic/kernel/drivers/usb/serial$ ls ...

  10. 【踩坑系列】发送微信模板消息返回40165 invalid weapp pagepath

    1. 踩坑经历 最近做了个需求,需要往公司微信公众号推送一个模板消息,并且点击该消息需要跳转到公司小程序的某个页面. 1.1 拿到模板id 既然是发送模板消息,第一步就需要登录微信公众号后台新建模板消 ...