django-rest-framework的www-authenticate头是做什么用的?
看django-rest-framework源码,views.py
文件里有这么个方法:
def handle_exception(self, exc):
"""
Handle any exception that occurs, by returning an appropriate response,
or re-raising the error.
"""
if isinstance(exc, (exceptions.NotAuthenticated,
exceptions.AuthenticationFailed)):
# WWW-Authenticate header for 401 responses, else coerce to 403
auth_header = self.get_authenticate_header(self.request)
if auth_header:
exc.auth_header = auth_header
else:
exc.status_code = status.HTTP_403_FORBIDDEN
def get_authenticate_header(self, request):
"""
If a request is unauthenticated, determine the WWW-Authenticate
header to use for 401 responses, if any.
"""
authenticators = self.get_authenticators()
if authenticators:
return authenticators[0].authenticate_header(request)
这个方法在用户访问api的时候,如果用户访问时的token非法,就抛出403异常而不是401.
为什么这么处理呢?403是禁止访问啊?
现在我在应用中,希望401用户认证失败时,跳转到登录页面。现在抛的异常是403,403与无权访问的状态码一样,这样不好区分无权访问,还是认证失败。
restframework为什么这么处理呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论