django rest framework - 基本身份验证错误

时间:2015-06-02 13:51:42

标签: android authentication django-rest-framework basic-authentication

我想在我的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)后) - 意味着每个人都可以访问)。

enter image description here

这是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

我的代码出了什么问题?这不起作用的任何原因?

谢谢!

1 个答案:

答案 0 :(得分:0)

您将身份验证详细信息作为授权标头的一部分发送,即令牌身份验证。 Django Rest Framework的默认身份验证方案是会话身份验证。您需要将TokenAuthentication添加到' DEFAULT_AUTHENTICATION_CLASSES'在你的设置中。

REST_FRAMEWORK = {

    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication'
    ),
 }