使用 Prisma 2 从查询中排除用户密码

Posted

技术标签:

【中文标题】使用 Prisma 2 从查询中排除用户密码【英文标题】:Exclude user's password from query with Prisma 2 【发布时间】:2021-09-09 09:09:46 【问题描述】:

最近我开始从事一个新项目以学习一些新技术(Prisma 2、带有 Express 的 REST api 等)。不过,我遇到了一个问题。

我的应用有一个用户认证系统,并且用户模型有一个密码列。因此,当客户端请求用户时,后端会从数据库中选择所有列,包括密码(顺便说一下哈希)。

我尝试不选择 prisma findMany 上的密码列,如下所示:

await prisma.user.findUnique(
  where: 
    ...
  ,
  select: 
    password: false
  
);

但是我得到了一个错误,棱镜说选择应该包含至少一个真正的价值。因此,我在选择中添加了id: true。我提出了一个 api 请求,我看到只有 id 为用户返回。

据我了解,prisma 希望我将我关心的所有列添加到选择对象中。但是,我需要来自用户的很多列,并且我正在做很多查询来获取用户,我不能每次都写下我需要的所有字段。

所以,我想问你是否有合法的方法来做到这一点。

PS:我不采取“改用 rawQuery”作为解决方案。

【问题讨论】:

【参考方案1】:

唯一合法的方法是将column: true 添加到您要包含的列中。此处有排除列的请求,因此如果您可以在与您相关的请求中添加 ? 以便我们查看优先级,那就太好了。

https://github.com/prisma/prisma/issues/5042 https://github.com/prisma/prisma/issues/7380 https://github.com/prisma/prisma/issues/3796

【讨论】:

以上是关于使用 Prisma 2 从查询中排除用户密码的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 8设置密码免密登录问题

MySQL 8设置密码免密登录问题

MySQL 8设置密码免密登录问题

从 Django Auth 中的 UserChangeForm 中排除用户名或密码

Prisma ORM 查询关系用户

SQLAlchemy:排除从查询的子查询中获取的行