Я пытаюсь создать вид входа в систему с помощью djangorestframework-jwt. Когда я зарегистрировал своего пользователя (url 'login /'), все было нормально, и все работало, но и переключился на другую страницу (url 'post_list'), чтобы создать сообщение. Я получил ошибку, что мой пользователь является анонимным, поэтому я решил, что мой пользователь снова не прошел проверку подлинности. Не могли бы вы помочь мне создать правильное представление для входа в JWT, которое позволит мне создавать и переключаться между различными страницами без каких-либо препятствий?
Мои настройки.py:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
],
}
Мои сериализаторы:
class TokenSerializer(serializers.Serializer):
username = serializers.CharField(max_length=128)
password = serializers.CharField(write_only=True,
required=True,
style={
'input_type': 'password',
'placeholder': 'password'
})
class PostSerializer(serializers.ModelSerializer):
created_by = serializers.ReadOnlyField(source='created_by.username')
class Meta:
model = Post
fields = '__all__'
Мои взгляды:
class UserLogin(generics.CreateAPIView):
"""
POST login/
"""
permission_classes = (permissions.AllowAny,)
queryset = User.objects.all()
serializer_class = TokenSerializer
def post(self, request, *args, **kwargs):
username = request.data.get("username", "")
password = request.data.get("password", "")
user = auth.authenticate(request, username=username, password=password)
if user is not None:
auth.login(request, user)
return Response({
"token": jwt_encode_handler(jwt_payload_handler(user)),
'username': username,
}, status=200)
return Response(status=status.HTTP_401_UNAUTHORIZED)
class PostView(generics.ListCreateAPIView):
"""
POST, GET post_list/
"""
serializer_class = PostSerializer
queryset = Post.objects.all()
def perform_create(self, serializer):
serializer.save(created_by=self.request.user)
permission_classes = (permissions.IsAuthenticatedOrReadOnly, )
URLS:
urlpatterns = [
url(r'^register/$', UserRegistration.as_view(), name='registration'),
url(r'^login/$', UserLogin.as_view(), name='user_login'),
url(r'^post_list/$', PostView.as_view(), name='post_list'),
]