drf 认证失败统一响应码
现象
# 兜底认证,直接失败
class NoAuthentication(BaseAuthentication):
def authenticate(self, request):
raise AuthenticationFailed('认证失败')
class AuthenticationFailed(APIException):
status_code = status.HTTP_401_UNAUTHORIZED
default_detail = _('Incorrect authentication credentials.')
default_code = 'authentication_failed'
当认证失败应该显示401,不是403
解决方案(每个认证类加入def authenticate_header)
# 参数取值认证
class ParamsAuthentication(BaseAuthentication):
def authenticate(self, request):
token = request.query_params.get('token')
if not token:
return
return 'szw', token
def authenticate_header(self, request):
return 'API'
# header取值
class HeaderAuthentication(BaseAuthentication):
def authenticate(self, request):
token = request.META.get('HTTP_AUTHORIZATION')
if not token:
return
return 'szw', token
def authenticate_header(self, request):
return 'API'
# 兜底认证,直接失败
class NoAuthentication(BaseAuthentication):
def authenticate(self, request):
raise AuthenticationFailed('认证失败')
def authenticate_header(self, request):
return 'API'
本文作者:Sherwin
本文链接:https://www.cnblogs.com/sherwin1995/p/16746728.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步