Weboldal keresés

node.js - A Prisma lekérdezés null-t ad vissza, amikor az adatok léteznek


Építettem egy Nestjs alkalmazást Prismával és GQL-lel. Épp most váltottam számítógépet (Macről PC-re), és hirtelen a login mutációm úgy tűnik, hogy nem működik, szó szerint ez az egyetlen... Itt van némi kód:

auth.resolver.ts:

@Mutation((returns) => AuthenticatedUser)
async login(
  @Context() { res }: Auth.GqlContext,
  @Args('payload', { type: () => UserLoginDto }) payload: UserLoginDto
): Promise<AuthenticatedUser> {
  const authenticatedUser = await this.authService.login(payload)
  
  res.cookie('jwt', authenticatedUser.jwt, cookieConfig)

  return authenticatedUser
}

auth.service.ts:

public async login(payload: UserLoginDto): Promise<AuthenticatedUser> {
  const { password, email } = payload

  Logger.log({ password, email })

  const user = await this.usersService.getUser(email) // returns null since the change

  Logger.log(JSON.stringify(user))

  const isValidPassword = await this.verifyPassword(user.password, password) // error is thrown here

  if (!isValidPassword) {
    throw new AuthenticationError('Password does not match')
  }

  const { id } = user

  const jwt = await this.jwtService.signAsync(
    { id, email },
    {
      secret: process.env.JWT_SECRET
    }
  )

  return {
    jwt,
    user
  }
}

users.service.ts:

public async getUser(email: string): Promise<User | null> {
  const { user } = this.prismaService

  Logger.log(email) // returns '[email '

  const temp = user.findUnique({ where: { email } }) // returns null here

  Logger.log(`PRISMA USER: ${JSON.stringify(temp)}`) // null

  return temp
}

Ami furcsa, hogy ugyanezeket a lekérdezéseket állítottam be a posts és a categories esetében is, de azok rendesen működnek. A JWT-vel sincs semmi köze.

A felhasználóm is benne van az adatbázisban:

Teljes GQL mutáció:

mutation {
  login(payload: { email: "[email ", password: "123" }) {
    jwt
    user {
      name
      id
      email
    }
  }
}

GQL hiba:

{
  "errors": [
    {
      "message": "Cannot read property 'password' of null",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "login"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "stacktrace": [
            "TypeError: Cannot read property 'password' of null",
            "    at AuthService.login (H:\\work\\blog-api\\src\\auth\\auth.service.ts:25:60)",
            "    at AuthResolver.login (H:\\work\\blog-api\\src\\auth\\auth.resolver.ts:43:31)",
            "    at target (H:\\work\\blog-api\\node_modules\\@nestjs\\core\\helpers\\external-context-creator.js:77:28)",
            "    at H:\\work\\blog-api\\node_modules\\@nestjs\\core\\helpers\\external-proxy.js:9:24"
          ]
        }
      }
    }
  ],
  "data": null
}

Prisma séma:

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Post {
  id            String     @id @default(uuid())
  title         String
  slug          String     @unique
  description   String
  relativeImage String     @map("relative_image")
  rawMdx        String     @map("raw_mdx")
  published     Boolean    @default(true)
  views         Int        @default(0)
  likes         Int        @default(0)
  createdAt     DateTime   @default(now()) @map("created_at")
  updatedAt     DateTime   @updatedAt @map("updated_at")
  categories    Category[]
}

model Category {
  id        String   @id @default(uuid())
  name      String   @unique
  color     String
  createdAt DateTime @default(now()) @map("created_at")
  updatedAt DateTime @updatedAt @map("updated_at")
  posts     Post[]
}

model User {
  id        String   @id @default(uuid())
  name      String   @unique
  email     String   @unique
  password  String
  createdAt DateTime @default(now()) @map("created_at")
  updatedAt DateTime @updatedAt @map("updated_at")
}

A számítógép váltás óta azt is futtattam, hogy npx prisma db pull && npx prisma generate...

Frissítés

Körülbelül egy óra után ez a probléma eltűnt. Ha valaki tudja, miért volt ez a problémám, örömmel megtudnám miért.

Válasz #1

felpróbáltad

const tmpUser = user.findUnique({where: {email}, select: {password: true}})