我使用的是Prisma
我有一个postgres表,我想搜索,只找到匹配的记录(id和accessKey)或(id和ownerId)
如果accessKey或ownerId未定义,它会继续查找where (id)
我发现如果我使用不可能的字符串,那么搜索工作
我在prisma文档中找不到合适的答案,所以我想我应该在这里问
return await db.attendee.findFirst({
where: {
OR: [
{ AND: { id, ownerId } },
{ AND: { id, accessKey } },
]
}
})
如果accessKey或ownerId未定义,那么它们将从查询中有效地消失,这是有意义的
我使用这个,它的工作-值是guid的,所以他们永远不会匹配,但如果我的秘密短语松了(它在repo,而不是在一个env var),那么这将是一个类似于sql注入的漏洞…
const userId = context?.currentUser?.sub || `can't touch this`;
const accessKey = vaccessAuth?.accessKey || `can't touch this`;
还有什么比"棱镜方式">
?根据我的理解,我们可以这样描述你的问题(如果我错了,请纠正我)。
查找第一个
attendee
id
字段匹配且(accessKey
或ownerId
字段匹配)
试试这个:
return await prisma.attendee.findFirst({
where: {
OR: [
{ ownerId: ownerIdValue },
{ accessKey: accessKeyValue }
],
AND: { id: idValue }
}
});