Django如何通过单个API获取rest_framework_jwt的access token与refresh token
实现方案(基于Django REST framework JWT生态)
第一步:编写整合双逻辑的自定义视图
你可以直接复用现有两个接口的底层逻辑,不用重复写JWT生成/校验代码:
from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView from rest_framework_jwt.settings import api_settings # 替换成你自己实际导入的ObtainJWTView和refresh_jwt_token from your_app.views import ObtainJWTView from rest_framework_jwt.views import refresh_jwt_token class UnifiedJWTView(APIView): def post(self, request, *args, **kwargs): # 校验请求参数类型,走对应逻辑 request_data = request.data # 场景1:传用户名密码,走首次颁发双token逻辑 if {"username", "password"}.issubset(request_data.keys()): auth_view = ObtainJWTView.as_view() return auth_view(request._request, *args, **kwargs) # 场景2:传refresh token,走刷新逻辑 elif "refresh" in request_data: return refresh_jwt_token(request._request, *args, **kwargs) # 参数不合法返回错误 return Response( {"error": "缺少必填参数:需传入用户名+密码 或 refresh_token"}, status=status.HTTP_400_BAD_REQUEST )
第二步:新增路由配置
在你的urls.py里添加新接口路由即可,原有的两个接口可以保留也可以下线:
url(r'^unified-token-auth', UnifiedJWTView.as_view(), name='unified-token-auth'),
接口使用规则
- 首次登录获取双token:请求体传入
username和password,接口默认同时返回access_token和refresh_token - 刷新token:请求体传入
refresh参数(即之前获取的refresh token),接口会返回新的access token和新的refresh token
注意事项
- 提前在settings.py中开启JWT刷新配置:
JWT_ALLOW_REFRESH = True - 如果你项目里的JWT返回字段是自定义过的,不需要改上面的视图逻辑,保持和原有两个接口的返回结构一致即可
内容的提问来源于stack exchange,提问作者sarath sathyan
相关产品推荐
相关产品推荐

