• 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),
    }
    
  • 相关阅读:
    超实用的JavaScript代码段 Item1 --倒计时效果
    你不知道的JavaScript--Item23 定时器的合理使用
    你不知道的JavaScript--Item22 Date对象全解析
    解决使用adb卸载应用失败的问题
    使用adb命令安装安卓apk包
    软件测试理论2
    软件测试理论1
    将Django部署到服务器(下)
    MySQL基本语句
    Nginx&uWSGI
  • 原文地址:https://www.cnblogs.com/jiakecong/p/15543227.html
Copyright © 2020-2023  润新知