安装
pip install djangorestframework-jwt
在app中注册
INSTALLED_APPS = [ ... # 解决跨域问题 'corsheaders', 'rest_framework', 'xadmin', 'crispy_forms', 'rest_framework_jwt', ... ]
配置:
# rest_framework 配置 REST_FRAMEWORK = { # 异常处理函数配置 'EXCEPTION_HANDLER': 'luffyapi.utils.exceptions.luffy_exception_handler', # 在rest_framework认证中添加JWT的全局认证 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ), } # JWT的认证 import datetime JWT_AUTH = { 'JWT_ENCODE_HANDLER': 'rest_framework_jwt.utils.jwt_encode_handler', # 解析token 'JWT_DECODE_HANDLER': 'rest_framework_jwt.utils.jwt_decode_handler', # 生成JWT载荷部分的内容(中间一段内容) 'JWT_PAYLOAD_HANDLER': 'rest_framework_jwt.utils.jwt_payload_handler', # 从载荷中获取user关键字段,如user_id 或者username 用这个字段信息从数据库中查询用户 'JWT_PAYLOAD_GET_USER_ID_HANDLER': 'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler', # 自定义登录认证成功之后返回的字典内容,返回一个字典 'JWT_RESPONSE_PAYLOAD_HANDLER': 'rest_framework_jwt.utils.jwt_response_payload_handler', 'JWT_SECRET_KEY': SECRET_KEY, # 用于生成token签名部分的秘钥 'JWT_GET_USER_SECRET_KEY': None, # 根据每个用户生成不同的秘钥,需要放入一个函数,函数必须接受一个参数,参数为user对象,通过user对象生成一个token秘钥并返回,秘钥用于生成token签名 'JWT_PUBLIC_KEY': None, # 用于验证token是否合法的函数,设置此函数之后JWT_SECRET_KEY将失效 'JWT_PRIVATE_KEY': None, # 用于生成token的函数,设置此函数之后JWT_SECRET_KEY将失效 'JWT_ALGORITHM': 'HS256', # token签名部分的加密方式 'JWT_VERIFY': True, # 是否告诉对方密码有效 'JWT_VERIFY_EXPIRATION': True, # 是否开启验证token的有效时间,True开启,False关闭(token永久有效) 'JWT_LEEWAY': 0, # 允许token在过期几秒内任然可以使用 'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300), # 设置token的到期时间 'JWT_AUDIENCE': None, 'JWT_ISSUER': None, 'JWT_ALLOW_REFRESH': False, # 刷新token到期时间,False不刷新,True刷新 'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7), # 刷新一次添加多长有效时间 'JWT_AUTH_HEADER_PREFIX': 'JWT', # 指定token开始字符串必须是JWT 'JWT_AUTH_COOKIE': None, # 在使用token时是不是还接受cookie认证 }
登录url配置
from rest_framework_jwt.views import obtain_jwt_token urlpatterns = [ path('login/', obtain_jwt_token), ]