我建议拦截这种类型的响应并根据需要进行调整。
有几种方法,但最简单的选择是定义您自己的视图,该视图被称为授权 url,它在内部调用 oauth2 视图并修改这种情况下的响应,例如类似
从:
from oauth2_provider.views import TokenView
...
url('auth/token/', TokenView.as_view()),
至:
from oauth2_provider.views import TokenView
def custom_token_view(request, *args, **kwargs):
response = TokenView.as_view()(request, *args, **kwargs)
if "invalid_grant " in response.content:
response = do_whatever_needed(response) # i.e. response.content
return response
...
url('auth/token/', custom_token_view),
更灵活/通用的解决方案替代方案
如果您使用 Django 休息框架 (DRF),我建议:
- 设置自定义 DRF JSON 渲染器- 定义您自己的,
- 您的自定义渲染器应该继承默认渲染器(rest_framework.renderers.JSONRenderer)
- 在渲染器中拦截所有响应 - 通过调用默认渲染函数并检测这个特定的 (error=invalid_grant) 并自定义它
如果您不使用 DRF:
- 创建自定义中间件
- 如果 django < 1.10 然后检查实现process_response,如果 django >=1.10 然后调用方法
- 再次,拦截所有响应并仅检测此响应,您可以根据需要对其进行修改