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}})