【发布时间】:2017-02-06 17:08:25
【问题描述】:
我正在尝试在 Django Rest Framework 上设置自定义身份验证类,但所有客户端请求都返回相同的错误:
{"detail":"未提供身份验证凭据。"}
所以,调试自定义类并打印 request.META 属性它没有 X_USERNAME 键。
CustomAuth 类:
class TecnicoAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
username = request.META.get('X_USERNAME')
if not username:
return None
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
raise exceptions.AuthenticationFailed('No such user')
return (user,None)
关于 settings.py 文件:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES' : (
'os_hotlink.auth.TecnicoAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
关于 apache 配置文件:
WSGIPassAuthorization On
最后是使用httpie的请求方法:
http -a user:pass http://127.0.0.1/
【问题讨论】:
-
httpie的请求方法不对,就是基本认证,你已经创建了一个自定义的认证类,它正在寻找一个名为X_username的自定义请求头
标签: python django django-rest-framework