До того, как я внедрил аутентификацию токена, он нормально работал для каждого пользователя,
GET: http://localhost:8000/users/1/
{
"url": "http://localhost:8000/users/1/",
"id": 1,
"username": "foo",
"boards": [
"http://localhost:8000/boards/15/"
]
},
После того, как я внедрил knox
аутентификацию токена,
#settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': ('knox.auth.TokenAuthentication',),
}
#users/views.py
class UserDetail(generics.RetrieveAPIView):
permission_classes = [permissions.IsAuthenticated]
queryset = User.objects.all()
serializer_class = UserSerializer
def get_object(self):
return self.request.use
#users/urls.py
app_name = 'users'
urlpatterns = [
path('', UserList.as_view(), name='user-list'),
path('<int:pk>/', UserDetail.as_view(), name='user-detail'),
path('accounts/register/', RegistrationAPI.as_view(), name='user-register'),
path('accounts/login/', LoginAPI.as_view(), name='user-login'),
path('accounts/logout/', knox_views.LogoutView.as_view(), name='user-logout'),
]
urlpatterns = format_suffix_patterns(urlpatterns)
# users/serializer.py
class UserSerializer(serializers.HyperlinkedModelSerializer):
boards = serializers.HyperlinkedRelatedField(
view_name='board:board-detail',
lookup_field='pk',
many=True,
queryset=Board.objects.all()
)
url = serializers.HyperlinkedIdentityField(
read_only=True,
lookup_field='pk',
view_name="users:user-detail")
class Meta:
model = User
fields = ('url', 'id', 'username', 'boards')
class CreateSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(
read_only=True,
lookup_field='pk',
view_name="users:user-detail")
def create(self, validated_data):
user = User.objects.create_user(
validated_data['username'], None, validated_data['password']
)
return user
class Meta:
model = User
fields = ('url', 'id', 'username', 'password')
class LoginUserSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField()
def validate(self, data):
user = authenticate(**data)
if user and user.is_active:
return user
raise serializers.ValidationError("unable to log in with provided credential")
# project/urls.py
urlpatterns = [
path('boards/', include('apps.board.urls', namespace='board')),
path('admin/', admin.site.urls),
path('users/', include('apps.users.urls', namespace='users')), # detail of users
path(r'^users/accounts/', include('knox.urls')), # detail of users
]
Теперь я получаю 401
ошибка,
GET: http://localhost:8000/users/1/
{
"detail": "Authentication credentials were not provided."
}
Четный, POST:http://localhost:8000/logout/
имеет такую же 401 несанкционированную ошибку. Сначала я попробовал login
, а затем logout
, но все равно получаю ту же ошибку. Почему я получаю несанкционированный EDIT После того, как я POST логин, я получил токен, и я передаю этот токен в заголовок 1) ПОЛУЧИТЬ индивидуального пользователя (http://localhost: 8000 / users / 1 / , 2) POST выход из системы (http://localhost: 8000 / пользователи / учетные записи / выход из системы / Но я все равно получаю такой же 401 Unauthorized
статус