我想在我的django-rest-framework应用程序中实现最基本的身份验证,并且我继续获得{“详细信息”:“无效的用户名/密码。”}响应(有时是401,有时是403)。
这是我的UserViewSet代码:
class UserViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = (permissions.IsAuthenticated, )
在settings.py中,我没有任何关于身份验证的信息,只有默认信息。
我的安卓代码:
getUsers = new HttpGet("http://10.100.102.10:8000/users/");
String basicAuth = "Basic " + Base64.encodeToString("testingUser:123".getBytes(), Base64.NO_WRAP);
getUsers.setHeader("Authorization", basicAuth);
// executing the request
response = httpClient.execute((HttpUriRequest) request);
result = EntityUtils.toString(response.getEntity());
responseCode = response.getStatusLine().getStatusCode();
用户确实存在于数据库中 - 正如您在屏幕截图中看到的那样。
我在浏览器的http://10.100.102.10:8000/users/网址中添加了json的屏幕截图,(我删除了permission_classes =(permissions.IsAuthenticated)后) - 意味着每个人都可以访问)。
这是UserSerializer:
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', )
def create(self, validated_data):
user = User.objects.create_user(
first_name = validated_data['first_name'],
last_name = validated_data['last_name'],
username = validated_data['username'],
password = validated_data['password'],
)
return user
我的代码出了什么问题?这不起作用的任何原因?
谢谢!
答案 0 :(得分:0)
您将身份验证详细信息作为授权标头的一部分发送,即令牌身份验证。 Django Rest Framework的默认身份验证方案是会话身份验证。您需要将TokenAuthentication添加到' DEFAULT_AUTHENTICATION_CLASSES'在你的设置中。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication'
),
}