Невозможно получить ответ от мутации trpc в trpc-v10, используя drf и django в качестве бэкенда

У меня есть приложение, которое использует t3-app как котельную плиту с tailwind и trpc и django как мой бэкенд с drf для создания конечных точек api.

Я не могу получить данные обратно из конечной точки входа, которая является общим apiview.

class LoginView(generics.GenericAPIView):
    authentication_classes = []
    permission_classes = []

    def post(self, request, *args, **kwargs):
        username = request.data.get("username")
        password = request.data.get("password")
        user = authenticate(username=username, password=password)
        if user:
            return Response(data={
                'data': {
                    "token": Token.objects.create(user=user).key,
                    'username': user.get_username(),
                    'email': user.email,
                    'group': [g.name for g in user.groups.all()]
                }
            }, content_type='application/json')
        else:
            return Response({"error": "Wrong Credentials"}, status=400)

Когда я пробую эту конечную точку с Postman, она работает как показано ниже: postman screenshot

но когда я использую trpc для получения этой конечной точки, я не получаю никакого ответа, но токен генерируется

form screenshot

мой код маршрутизатора trpc:

import { z } from "zod";
import { router, publicProcedure } from "../trpc";

export const commonRouter = router({
  login: publicProcedure
    .input(
      z.object({
        username: z.string(),
        password: z.string().min(4, "Password must be at least 4 characters"),
      })
    )
    .mutation(async ({ input }) => {
      console.log("Hello from login mutation")
      console.log('input', input)
      try {
        // const router = useRouter();
        const data = {
          username: input.username,
          password: input.password,
        };
        const options = {
          method: "POST",
          headers: {
            'Accept': "application/json",
            "Content-Type": "application/json",
          },
          body: JSON.stringify(data),
        };
        fetch("http://127.0.0.1:8000/api/login", options)
        .then((res) => {console.log("res:",res);res.json()})
        .then((data) => console.log("data", data))
        .catch((error) => console.log("error", error));
        // localStorage.setItem("token", recData);
      } catch (error) {
        console.log("error");
      }
    }),
});

В консольном журнале записаны следующие элементы:

Hello from login mutation
input { username: 'jhcadmin', password: 'jhclp' }
res: Response {
  [Symbol(realm)]: null,
  [Symbol(state)]: {
    aborted: false,
    rangeRequested: false,
    timingAllowPassed: true,
    requestIncludesCredentials: true,
    type: 'default',
    status: 200,
    timingInfo: {
      startTime: 1010918.1206000149,
      redirectStartTime: 0,
      redirectEndTime: 0,
      postRedirectStartTime: 1010918.1206000149,
      finalServiceWorkerStartTime: 0,
      finalNetworkResponseStartTime: 0,
      finalNetworkRequestStartTime: 0,
      endTime: 0,
      encodedBodySize: 149,
      decodedBodySize: 149,
      finalConnectionTimingInfo: null
    },
    cacheState: '',
    statusText: 'OK',
  },
  [Symbol(headers)]: HeadersList {
    [Symbol(headers map)]: Map(10) {
      'date' => 'Sun, 05 Feb 2023 11:25:41 GMT',
      'server' => 'WSGIServer/0.2 CPython/3.11.1',
      'content-type' => 'application/json',
      'vary' => 'Accept, Origin',
      'allow' => 'POST, OPTIONS',
      'x-frame-options' => 'DENY',
      'content-length' => '149',
      'x-content-type-options' => 'nosniff',
      'referrer-policy' => 'same-origin',
      'cross-origin-opener-policy' => 'same-origin'
    },
    [Symbol(headers map sorted)]: null
  }
}
data undefined
Вернуться на верх