jwt用户登录
JWT就是一段字符串,由三段信息构成,第一部分是头部(header,声明token类型,声明签证的加密算法),第二部分是载荷(payload,类似于飞机上承载的物品,存放标准声明、公共声明、私有声明),第三部分是签证(signature,辨真伪、防篡改)
pip install djangorestframework-jwt
settings.py
或settings/dev.py
# drf配置
REST_FRAMEWORK = {
# 自定义异常处理
'EXCEPTION_HANDLER': 'fuguangapi.utils.exceptions.exception_handler',
# 自定义认证
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # jwt认证
'rest_framework.authentication.SessionAuthentication', # session认证
'rest_framework.authentication.BasicAuthentication',
),
}
import datetime
# jwt认证相关配置项
JWT_AUTH = {
# 设置jwt的有效期
# 如果内部站点,例如:运维开发系统,OA,往往配置的access_token有效期基本就是15分钟,30分钟,1~2个小时
# 'JWT_EXPIRATION_DELTA': datetime.timedelta(weeks=1), # 一周有效,
'JWT_EXPIRATION_DELTA': datetime.timedelta(minutes=30), # 一周有效,
# 自定义载荷
'JWT_PAYLOAD_HANDLER': 'fuguangapi.utils.authenticate.jwt_payload_handler',
# 自定义响应数据
'JWT_RESPONSE_PAYLOAD_HANDLER': 'fuguangapi.utils.authenticate.jwt_response_payload_handler'
}
# 自定义认证用户使用的模型
# AUTH_USER_MODEL` 参数的设置以`点.`来分隔,表示`应用名.模型类名`。
AUTH_USER_MODEL = 'users.User'
手动签发jwt
# 可以进入到django的终端下测试生成token的逻辑
python maange.py shell
# 引入jwt配置
from rest_framework_jwt.settings import api_settings
# 获取载荷生成函数
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
# 获取token生成函数
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
# 生成载荷需要的字典数据
# 此处,拿数据库中的用户信息进行测试
from users.models import User
user = User.objects.first()
payload = jwt_payload_handler(user) # user用户模型对象
# 生成token
token = jwt_encode_handler(payload)
users/urls.py
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
path('login/', obtain_jwt_token),
]