DRF框架的一系列功能:认证、权限、限流,都是依赖于JWT。
整个流程就是这样的:
-
客户端发送用户名和密码到服务端,
-
验证通过,生成JWT
-
返回JWT给客户端
-
下次,客户端发送请求时,携带JWT,一般是在请求头里加入
Authorization
,并加上JWT
标注:
|
- 服务端会验证 token,如果验证通过就会返回相应的资源
- 在此基础上,可以实现权限和限流
流程图如下:
而目前,在DRF项目开发过程中,token的生成、认证方式,主要有两种方式:pyjwt
和rest_framework_jwt
pyjwt
配置信息
import datetime
JWT_EXPIRATION_DELTA = datetime.timedelta(seconds=300) # 指明jwt的过期时间
REST_FRAMEWORK = { # 可以全局配置,也可以局部配置
# 指定视图权限
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny', # 默认每个视图,是只有认证用户可以访问
),
# 指定drf认证机制
'DEFAULT_AUTHENTICATION_CLASSES': (
'user.tools.auth.JSONWebTokenAuthentication', # 指明 jwt认证类
'rest_framework.authentication.SessionAuthentication', # session认证
'rest_framework.authentication.BasicAuthentication', # 基本认证
),
}
工具类
自定义方法,生成token,解析token
from datetime import datetime
import jwt
from django.conf import settings
def jwt_encode_handler(user):
"""
:param user: 用户对象
:return: 生成的token
"""
payload = {