只需两步就能实现JWT认证
Django系列文章
Django结合七牛云实现对象云储存
文章目录
- Django系列文章
- 前言-思路分析
- 操作方式
-
- 第一步,将获取token的路由 与 `obtain_jwt_token` 进行关联。
- 第二步,设置token的返回格式。
前言-思路分析
使用 djangorestframework-jwt
不需要定义视图函数吗?
一般情况下,DRF-JWT在登陆功能中应用最为广泛。而登陆视图的功能就是生成签证token ,然后将其返回给前端。
而生成签证token的事情,已有 djangorestframework-jwt
提供的 obtain_jwt_token
函数完成。
我们需要做的就是:补充一个函数用于处理返回值的格式,将 token 按照接口的格式返回给前端。做法就是通过 JWT_RESPONSE_PAYLOAD_HANDLER
配置项,指向自定义的函数。
操作方式
第一步,将获取token的路由 与 obtain_jwt_token
进行关联。
# urls.pyfrom django.urls import pathfrom rest_framework_jwt.views import obtain_jwt_token # 导入 obtain_jwt_tokenurlpatterns = [ path('api/login', obtain_jwt_token), # 路由关联视图]
第二步,设置token的返回格式。
(1) 根据接口文档,token 的前缀需要是 Bearer ,因此将 JWT_AUTH_HEADER_PREFIX
的值设置为 Bearer
。这样在解析 token 时,会自动去掉前缀。
(2) 返回的 token 不可能是永久的,因此要给 token 设定过期时间。视图函数逻辑无法修改,我们可以通过 JWT_EXPIRATION_DELTA
配置项来完成设置。
# JWT认证的配置信息JWT_AUTH = { 'JWT_AUTH_HEADER_PREFIX': 'Bearer', # JWT的前缀 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), # JWT的过期时间 'JWT_RESPONSE_PAYLOAD_HANDLER': 'myserver.utils.jwt_response_payload_handler', # 请求成功的处理函数路径}
注意点:
JWT_RESPONSE_PAYLOAD_HANDLER
的值,是你定义jwt_response_payload_handler
的路径。
比如:你的应用名字叫做myserver
,然后在此目录下的utils.py
文件中,定义jwt_response_payload_handler
函数来处理jwt请求成功的返回值。
那么JWT_RESPONSE_PAYLOAD_HANDLER
的值就是'myserver.utils.jwt_response_payload_handler'
.
(3) 最终返回给前端的格式,有自定义的函数完成。在自定义函数中重新封装返回值。
def jwt_response_payload_handler(token, user=None, request=None): """ 自定义jwt认证成功的返回数据格式 :param token: :param user: :param request: :return: """ return { 'status': 0, 'message': '登陆成功!', 'token': f'Bearer {token}' }