Привет, кажется, вы используете knox, который не совсем то же самое, но по сути он похож. Возможно, ваш взгляд защищен из-за ваших настроек DEFAULT_PERMISSION_CLASSES
.
Если вы хотите войти через это представление, вам нужно установить
permission_classes = [AllowAny, ]
на ваш взгляд.
Однако я бы не стал этого делать, поскольку это взлом. (Я знаю, что прошел через это, и мы написали одну и ту же статью).
Правильный способ сделать это - определить сериализатор пользователя в файле конфигурации / настроек Django, чтобы вы могли получить необходимую информацию при входе в систему.
REST_KNOX = {
'USER_SERIALIZER': 'auth.serializers.UserRetrieveSerializer'
}
Затем просто расширьте представление входа по умолчанию и используйте basic auth
в качестве класса аутентификации.
from knox.views import LoginView as KnoxLoginView
from rest_framework.authentication import BasicAuthentication
from rest_framework.permissions import IsAuthenticated
class LoginAPI(KnoxLoginView):
"""
Login endpoint.
"""
authentication_classes = [BasicAuthentication, ]
permission_classes = [IsAuthenticated, ]
И для всех остальных видов вы можете использовать knox.auth.TokenAuthentication
.
И это все ...
Соответствующий код для тестирования это:
import base64
def get_basic_auth_header(username, password):
return 'Basic %s' % base64.b64encode(
('%s:%s' % (username, password)).encode('ascii')).decode()
from rest_framework.test import APITestCase
class MyTestCase(APITestCase):
username = 'foo'
password = 'bar'
def test_login(self):
# Add basic auth credentials
self.client.credentials(
HTTP_AUTHORIZATION=get_basic_auth_header(
self.username, self.password))
etc...
В вашем urls.py
from knox import views as knox_views
from .views import LoginAPI
...
url(r'^login/$', LoginAPI.as_view(), name='knox_login'),
url(r'^logout/$', knox_views.LogoutView.as_view(), name='knox_logout'),
url(r'^logoutall/$', knox_views.LogoutAllView.as_view(), name='knox_logoutall'),
...