使用 POST 方法使用 DJango REST 进行会话身份验证的问题

问题描述 投票:0回答:0

我正在使用 Django REST Framework 和 Quasar 以及用于身份验证的会话开发我的第一个 Web 应用程序。我的问题是,不需要身份验证的 GET/POST 请求可以正常工作,需要身份验证的 GET 请求可以正常工作,但是需要身份验证的 POST 请求不能正常工作。

我收到错误 403,

request.user
对象是 AnonymousUser。会话 cookie 在 POST 响应中传输,如下图所示。

这是我的要求:

const response = await this.$api.post('cardgames/', {
      name: this.name,
      privacy: this.privacy,
      user: userId.data.userId,
    });

(我之前获取用户 ID,因为我的 request.user 对象是 AnonymousUser)。

这是后端代码(GET 请求有效):

class CardGameViewSet(viewsets.ModelViewSet):
authentication_classes = [SessionAuthentication]
permission_classes = [IsAuthenticated]

queryset = CardGame.objects.all()
serializer_class = ComplexCardGameSerializer

def get_queryset(self):
    print("user get card game : ", self.request.user)
    return self.queryset.filter(user=self.request.user)

def create(self, request, *args, **kwargs):
    print("user create card game : ", request.user)
    print("is auth : ", request.user.is_authenticated)
    user = User.objects.get(id=request.data['user'])
    userUrl = 'http:///api/users/' + str(user.id) + '/'
    request.data['user'] = userUrl
    print(request.data)
    serializer = self.get_serializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)

    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

这是登录代码:

class LoginView(APIView):
def post(self, request):
    data = request.data
    username = data.get('username')
    password = data.get('password')
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return Response({'success': 'Login Successful'})

    return Response({'error': 'Wrong Credentials'})

我已经配置了 Axios 来传输凭证 (

axios.defaults.withCredentials = true;
)

python django django-rest-framework session-cookies django-authentication
© www.soinside.com 2019 - 2024. All rights reserved.