0

Я хочу реализовать самую основную аутентификацию в своем приложении django-rest-framework, и я продолжаю получать {"detail": "Invalid username/password."} Response (иногда 401, а иногда и 403).django rest framework - ошибка при базовой аутентификации

Вот мой 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(); 

Пользователь не существует в базе данных - как вы можете видеть на скриншоте.

Я добавляю снимок экрана json, который я получаю с URL-адреса http://10.100.102.10:8000/users/ в браузере (после того как я удалил allow_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 

Что случилось с моим кодом? по какой-либо причине это не работает?

спасибо!

ответ

0

Вы отправляете данные аутентификации в составе заголовка авторизации, который является аутентификацией Token. Схема аутентификации по умолчанию для Django Rest Framework - это проверка подлинности сеанса. Вам нужно добавить TokenAuthentication в «DEFAULT_AUTHENTICATION_CLASSES» в ваших настройках.

REST_FRAMEWORK = { 

    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.SessionAuthentication', 
     'rest_framework.authentication.TokenAuthentication' 
    ), 
} 
Смежные вопросы