Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保护部署到heroku的prisma端点_Heroku_Graphql_Prisma - Fatal编程技术网

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

如何保护部署到heroku的prisma端点,heroku,graphql,prisma,Heroku,Graphql,Prisma,我将prisma PostgreSQL和瑜伽服务器部署到heroku 但是graphql端点是公共的,任何人都可以从中变异 有没有像hasura那样简单的方法: PS:我没有使用docker来部署它,我通过prisma向导在中部署了所有内容:您需要prisma“机密”来保护您的端点,这样只有您和您的应用程序才能访问/修改数据。Prisma称之为managementApiSecret(请参阅) 我对Prisma控制台不是很熟悉,但是如果您使用类似于Prisma.yml文件的东西将Prisma服务

我将prisma PostgreSQL和瑜伽服务器部署到heroku

但是graphql端点是公共的,任何人都可以从中变异

有没有像hasura那样简单的方法:

PS:我没有使用docker来部署它,我通过prisma向导在中部署了所有内容:

您需要prisma“机密”来保护您的端点,这样只有您和您的应用程序才能访问/修改数据。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以不显示操场。