zoukankan      html  css  js  c++  java
  • Django(75)djangorestframeworksimplejwt

    前言

    由于之前我们一直使用的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),
    }
    
  • 相关阅读:
    自定义类型中结构体、枚举等,结构体内存对齐相关要点总结
    可变参数模拟printf()函数实现一个my_print()函数以及调用可变参数需注意的陷阱
    一些关于memcpy memmove函数的区别,和模拟实现
    浅谈 数组指针 指针数组 函数指针 函数指针数组... 以及它们之间区别。
    C语 三子棋小游戏
    5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
    stm32移植ds18b20时出现的问题
    自己实现strcmp
    C语言新手写扫雷攻略3
    C语言新手写扫雷攻略2
  • 原文地址:https://www.cnblogs.com/jiakecong/p/15543227.html
Copyright © 2011-2022 走看看