Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python JWT登录Django Rest框架_Python_Django_Django Rest Framework_Jwt_Django Rest Framework Jwt - Fatal编程技术网

Python JWT登录Django Rest框架

Python JWT登录Django Rest框架,python,django,django-rest-framework,jwt,django-rest-framework-jwt,Python,Django,Django Rest Framework,Jwt,Django Rest Framework Jwt,我正在尝试使用djangorestframework-jwt创建登录视图。当我登录我的用户(url“login/”)时,一切正常,但切换到另一个页面(url“post_list”)创建帖子时,我发现一个错误,即我的用户是匿名的,因此我决定再次未经身份验证我的用户。你能帮我创建一个正确的JWT登录视图吗?这个视图允许我在不同的页面之间创建和切换,没有任何障碍 My settings.py: REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSE

我正在尝试使用djangorestframework-jwt创建登录视图。当我登录我的用户(url“login/”)时,一切正常,但切换到另一个页面(url“post_list”)创建帖子时,我发现一个错误,即我的用户是匿名的,因此我决定再次未经身份验证我的用户。你能帮我创建一个正确的JWT登录视图吗?这个视图允许我在不同的页面之间创建和切换,没有任何障碍

My settings.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, )
网址:


登录后,您是否在尝试创建帖子时在请求授权标头中发送jwt令牌?您使用的前端框架是什么?正如上面的评论员所指出的,您需要为每个请求提供一个“Authorization”头,该头包含对后端经过身份验证的端点的请求。标题将包含登录时收到的令牌。@Nida我正在使用djangorestframework@roziukpDRF是您的后端。您使用哪种语言编写网站/客户端代码?通常类似Angular、React甚至纯JavaScriptPlease,请提供如何发送两个请求登录后,在尝试创建post时是否在请求授权标头中发送jwt令牌?您使用的前端框架是什么?正如上面的评论员所指出的,您需要为每个请求提供一个“Authorization”头,该头包含对后端经过身份验证的端点的请求。标题将包含登录时收到的令牌。@Nida我正在使用djangorestframework@roziukpDRF是您的后端。您使用哪种语言编写网站/客户端代码?通常是Angular、React甚至是纯JavaScriptPlease,请提供如何发送这两个请求
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'),
]