如何保护部署到heroku的prisma端点
我将prisma PostgreSQL和瑜伽服务器部署到heroku 但是graphql端点是公共的,任何人都可以从中变异 有没有像hasura那样简单的方法: PS:我没有使用docker来部署它,我通过prisma向导在中部署了所有内容:您需要prisma“机密”来保护您的端点,这样只有您和您的应用程序才能访问/修改数据。Prisma称之为如何保护部署到heroku的prisma端点,heroku,graphql,prisma,Heroku,Graphql,Prisma,我将prisma PostgreSQL和瑜伽服务器部署到heroku 但是graphql端点是公共的,任何人都可以从中变异 有没有像hasura那样简单的方法: PS:我没有使用docker来部署它,我通过prisma向导在中部署了所有内容:您需要prisma“机密”来保护您的端点,这样只有您和您的应用程序才能访问/修改数据。Prisma称之为managementApiSecret(请参阅) 我对Prisma控制台不是很熟悉,但是如果您使用类似于Prisma.yml文件的东西将Prisma服务
managementApiSecret
(请参阅)
我对Prisma控制台不是很熟悉,但是如果您使用类似于Prisma.yml
文件的东西将Prisma服务器部署到Heroku,那么您可以指定一个secret:
行,如下所示:secret:${env:Prisma\u secret}
。然后,您可以在Heroku上Prisma服务器的设置中设置配置变量,其中密钥为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
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服务器。在没有看到瑜伽服务器的代码的情况下,很难帮助您实现这一点,但我的使用了prisma binding
包,如下所示:
endpoint: ${env:PRISMA_ENDPOINT_PROD}
datamodel: datamodel.graphql
secret: ${env:PRISMA_SECRET}
hooks:
post-deploy:
- graphql get-schema -p prisma
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数据库。瑜伽服务器部署在Heroku上,我已经在瑜伽服务器的Heroku设置中指定了PRISMA_SECRET
环境变量
但是,此设置将阻止您在浏览器中访问Prisma端点,并通过GraphQL手动查询和修改数据库中的数据。也许有办法解决这个问题,但我不知道如何解决。还要注意的是,这不会给你Hasura看起来给你的好的登录界面
如果您想了解更多的代码,您可以查看Wes Bos的GitHub,这是他在“Fullstack Advanced React&GraphQL”课程中使用的。您需要一个Prisma“secret”来保护端点,这样只有您和您的应用程序才能访问/修改数据。Prisma称之为managementApiSecret
(请参阅)
我对Prisma控制台不是很熟悉,但是如果您使用类似于Prisma.yml
文件的东西将Prisma服务器部署到Heroku,那么您可以指定一个secret:
行,如下所示:secret:${env:Prisma\u secret}
。然后,您可以在Heroku上Prisma服务器的设置中设置配置变量,其中密钥为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
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服务器。在没有看到瑜伽服务器的代码的情况下,很难帮助您实现这一点,但我的使用了prisma binding
包,如下所示:
endpoint: ${env:PRISMA_ENDPOINT_PROD}
datamodel: datamodel.graphql
secret: ${env:PRISMA_SECRET}
hooks:
post-deploy:
- graphql get-schema -p prisma
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数据库。瑜伽服务器部署在Heroku上,我已经在瑜伽服务器的Heroku设置中指定了PRISMA_SECRET
环境变量
但是,此设置将阻止您在浏览器中访问Prisma端点,并通过GraphQL手动查询和修改数据库中的数据。也许有办法解决这个问题,但我不知道如何解决。还要注意的是,这不会给你Hasura看起来给你的好的登录界面
如果您想了解更多代码,可以查看Wes Bos的GitHub,这是他在“Fullstack Advanced React&GraphQL”课程中使用的内容。感谢spencer的回复,我的网站是在Wes Bos的基础上建立的,几乎相同的设置,但我仍然面临着相同的问题。这就是我解决问题的方法,可能不如使用managementApiSecret安全。但它做到了我想要的。GraphQLServer的启动功能有一个名为“游乐场”的选项,您可以将其设置为false以不显示游乐场。感谢spencer的回复,我的网站是建立在Wes Bos的基础上的,几乎相同的设置,但我仍然面临着相同的问题。这就是我解决问题的方法,可能不如使用managementApiSecret安全。但它做到了我想要的。GraphQLServer中的start函数有一个名为“playerd”的选项,您可以将该选项设置为false以不显示操场。