如何保护部署到heroku的prisma端点

时间:2019-06-22 13:59:58

标签: heroku graphql prisma

我将hermana PostgreSQL和Yoga服务器部署到了Heroku,

但是graphql端点是公共的,任何人都可以对其进行突变。

有没有像hasura一样简单的方法: https://docs.hasura.io/1.0/graphql/manual/deployment/securing-graphql-endpoint.html

PS:我没有使用docker进行部署,而是通过prisma console

中的pyramida向导部署了所有内容。

1 个答案:

答案 0 :(得分:0)

您需要一个Prisma“秘密”来保护您的端点,以便只有您和您的应用程序才能访问/更改数据。 Prisma将此称为managementApiSecret(请参阅here)。

我对Prisma控制台不是很熟悉,但是如果您使用prisma.yml之类的文件将Prisma服务器部署到Heroku,则可以指定如下的secret:行:{{1 }}。然后,您可以在Heroku上Prisma服务器的设置中设置Config Var,其中密钥为secret: ${env: PRISMA_SECRET},并且值为随机字符串。我相信您在使用PRISMA_SECRET命令时希望做同样的事情。因此,您prisma deploy应该看起来像这样:

prisma.yml

然后,您需要在Yoga服务器中指定相同的秘密,以便它可以访问Prisma服务器。很难在没有看到瑜伽服务器代码的情况下为您提供帮助,但是我的使用endpoint: ${env:PRISMA_ENDPOINT_PROD} datamodel: datamodel.graphql secret: ${env:PRISMA_SECRET} hooks: post-deploy: - graphql get-schema -p prisma 包是这样的:

prisma-binding

您可以看到Yoga服务器使用指定的密码连接到Prisma数据库。 Yoga服务器已部署在Heroku上,并且我已经在Yoga服务器的Heroku设置中指定了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; 环境变量。

但是,此设置将阻止您访问浏览器中的Prisma端点,并通过GraphQL游乐场手动查询和更改数据库中的数据。可能有解决此问题的方法,但我不确定如何解决。另外请注意,这不会像Hasura那样为您提供漂亮的登录界面。

如果您想了解更多代码,可以查看Wes Bos的GitHub repo,这是他在其课程“ Fullstack Advanced React&GraphQL”中所使用的。