您需要一个 Prisma“机密”来保护您的端点,以便只有您和您的应用程序可以访问/更改数据。 Prisma 将此称为managementApiSecret(参见here)。
我对 Prisma 控制台不是很熟悉,但是如果您使用 prisma.yml 文件将 Prisma 服务器部署到 Heroku,那么您可以像这样指定 secret: 行:secret: ${env: PRISMA_SECRET}。然后,您可以在 Heroku 上的 Prisma 服务器的设置中设置一个 Config Var,其中键是 PRISMA_SECRET,值是随机字符串。我相信您在使用prisma deploy 命令时也想做同样的事情。所以你prisma.yml 应该是这样的:
endpoint: ${env:PRISMA_ENDPOINT_PROD}
datamodel: datamodel.graphql
secret: ${env:PRISMA_SECRET}
hooks:
post-deploy:
- graphql get-schema -p prisma
然后,您需要在 Yoga 服务器中指定相同的密钥,以便它可以访问 Prisma 服务器。如果没有看到 Yoga 服务器的代码,很难帮助您解决这个问题,但我的使用 prisma-binding 包,如下所示:
const { Prisma } = require('prisma-binding');
const db = new Prisma({
typeDefs: 'src/generated/prisma.graphql',
endpoint: process.env.PRISMA_ENDPOINT_PROD,
secret: process.env.PRISMA_SECRET,
debug: false, // Turn on to console.log queries and mutations
});
module.exports = db;
您可以看到 Yoga 服务器使用指定的密钥连接到 Prisma 数据库。 Yoga 服务器部署在 Heroku 上,我在 Yoga 服务器的 Heroku 设置中指定了 PRISMA_SECRET 环境变量。
但此设置将阻止您在浏览器中访问 Prisma 端点并通过 GraphQL 游乐场手动查询和更改数据库中的数据。可能有办法解决这个问题,但我不确定如何。另请注意,这不会为您提供 Hasura 似乎为您提供的漂亮登录界面。
如果您想了解更多代码,可以查看 Wes Bos 的这个 GitHub repo,这是他在名为“Fullstack Advanced React & GraphQL”的课程中使用的。