问题标签 [hasura]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
673 浏览

graphql - 如何使用 Apollo 客户端 websocket 处理注销/登录并保持有效订阅?

我在代码沙箱上有一个示例 React/Apollo 应用程序,它尝试通过订阅处理注销/登录操作(到启用 JWT 身份验证的示例 Hasura GraphQL 服务器)。工作流程如下面的屏幕截图所示(要重现,请检查日志并单击退出按钮;如果需要,请刷新预览)。

编辑无聊雷霆pkzel

我尝试通过在每次清除订阅(注销)或重试(登录)(wsLink.subscriptionClient.close(false, false))时重置 websocket 连接来处理它。但是errorLink(Apollo中间件)在退出后不再调用,所以不知道如何干净利落地触发登录/重新订阅。但是,组件不断收到错误。错误在某处,但错误链接没有意识到这一点。

如果错误链接可以捕捉到错误,我可以插入我想要重新验证的所有逻辑,我很高兴。

这里实际上有2个问题:

  • 如何确保错误链接在注销后继续捕获错误(此处:websocket reset)?
  • 如果不是这种方法,使用 Apollo websocket 处理注销/登录的最佳方法是什么?(理想情况下,我想留在同一个 SPA 页面上,中断订阅,清除本地数据,显示登录对话框,登录后恢复订阅和数据。)

编辑:与此同时,我尝试使用 RetryLink,它似乎有效:订阅尝试被捕获,从而有机会捕获、验证和重新订阅。但我不确定这是否真的是处理注销/登录的好方法。欢迎就如何处理它提出建议。这是更新的沙箱


原始尝试:

初始渲染:

在此处输入图像描述

单击退出按钮和显示步骤的日志后进行渲染:

在此处输入图像描述


注意:graphql 服务器是托管在 Heroku 上的示例 hasura 应用程序,启用了 JWT 身份验证。客户端应用程序的 JWT 有效期多年。

0 投票
2 回答
448 浏览

yaml - Hasura 端点作为环境变量

我正在尝试以config.yaml一种与我的 Hasura 端点无关的方式签入我的 Hasura 文件。这个想法是每个开发人员将检查项目并在不同的 Hasura 实例上工作,然后我们希望将迁移分别部署和应用到登台和生产服务器。

例如,有没有一种方法可以让 config.yaml 从.env文件中获取值?

0 投票
1 回答
706 浏览

postgresql - 连接到 DigitalOcean 液滴上的 Hasura Postgres 数据库

我已经使用此处的说明在 DigitalOcean 液滴上设置了 Hasura - https://docs.hasura.io/1.0/graphql/manual/guides/deployment/digital-ocean-one-click.html -

如何连接到 Postgres 数据库?最好使用 DBeaver 之类的东西 - 带有主机、数据库、用户、密码。

我猜 Postgres 是在 Docker 容器中运行的,但是你如何将它暴露给外界呢?

0 投票
1 回答
303 浏览

permissions - 当涉及两个表时,如何使 Hasura 的权限功能起作用?

使用 Hasura GraphQL 引擎,给出下图:

在此处输入图像描述

如何限制表上的选择操作company,只允许选择与表上的用户关联(fk)的公司记录user

当然,我使用的是x-hasura-user-id会话变量。但是如何company_id在查看user表格时引用“当前”?

这是一个简单的问题,但是知道了这一点,我将来可以进行更复杂的验证。

0 投票
2 回答
443 浏览

postgresql - '星期一'的时间段的postgresql列表| 09:00:00 | 11:00:00

我正在构建一个预订系统,用户将在其中设置他们的可用性,例如:我从周一上午 9 点到上午 11 点,周二从上午 9 点到下午 5 点等......并且需要在他们的可用性之外的 15 分钟内生成一个时间段列表。

我有下表(但可以灵活地更改它):

availabilities(day_of_week text, start_time: time, end_time: time)

它返回如下记录:

所以我正在尝试构建一个存储过程来生成一个时隙列表到目前为止我得到了这个:

当我使用 Hasura 时,我返回了一个 setof 而不是一个表,它需要返回一个 setof,所以我只创建一个空白表。

我认为我在正确的轨道上,但目前被困在:

  • 如何从“星期一”09:00:00 为下星期一创建时间戳,因为我只关心从今天开始的时间段?
  • 如何转换'Monday' | 09:00:00 | 11:00:00为相隔 15 分钟的时隙列表?
0 投票
0 回答
58 浏览

variables - hasura 表的正确设置是什么

用户角色权限不起作用。我正在将 x-hasura-role 设置为用户,但无法查询允许选择权限而不进行任何检查的表。也无法从之前工作的 react apollo 进行查询。

hasura_session_variables

在此处输入图像描述

请参阅下图的权限:

hasura_table_permissions

在此处输入图像描述

这里可能的错误配置是什么?

0 投票
1 回答
130 浏览

amazon-web-services - 使用 AWS Lambda 对 Hasura 身份验证挂钩的空响应

我在使用 Lambda 配置 Hasura 身份验证挂钩时遇到了一些麻烦。出于安全原因,我需要这样的功能,因为我将 JWT 令牌存储在仅 HTTP 的 cookie 中。

我正在使用返回正确响应的无服务器函数(直接测试 curl 请求时,甚至在记录 lambda 时):

然而,Hasura 钩子似乎没有识别出响应:

这两行日志在我的日志中是相邻的。我只是对它们进行了一些重新格式化以方便阅读。

我的 lambda 代码如下所示:

知道发生了什么吗?请注意,我正在使用无服务器离线,以防万一。:)

0 投票
3 回答
865 浏览

graphql - 如何创建远程 Hasura 服务器的本地“副本”?

我想在我的本地机器上设置 Hasura 的开发环境,复制我现有的产品(相同的表、相同的模式、相同的数据)。

  • 完成此任务所需的步骤是什么?
0 投票
0 回答
2009 浏览

docker - 启动 Hasura GraphQL 引擎 Docker 镜像

我正在尝试开始使用在 Docker 中的 OSX 上本地运行的Hasura GraphQL 引擎并连接到现有数据库,但我无法找到容器或 Hasura 控制台。

这是我所拥有的:

这是我的启动脚本 (docker-run.sh),它为 Hasura 设置端口和环境变量:

运行./docker-run.sh返回一个 64 字符的十六进制字符串,我假设它是容器 ID,但是运行时我看不到容器docker ps,并且没有加载任何内容http://localhost:8080/console

我错过了什么?

更新 1

我可以在运行时看到容器docker ps -a- 它的状态为exited(1)(这意味着应用程序错误)。

我可以在日志中看到:

我已按照设置初始模式的说明进行操作,但运行结果./docker-run.sh没有改变。

更新 2

我没有意识到必须在特定数据库上安装pgcrypto扩展。现在我已经这样做了,日志看起来很健康——尽管我在运行时仍然无法访问控制台hasura console

这是我的config.yaml

endpoint: http:localhost:8080

...以及由此产生的错误:

再说一次,我错过了什么?

更新 3

更改了 config.yaml...

endpoint: http://localhost:8080

哎呀(脸红)。

好的,它正在工作:)

0 投票
1 回答
3493 浏览

graphql - 为什么我不能在 graphql 中过滤深层嵌套查询?

所以我最近才开始使用graphql(准确地说是上周)。我得到了能够使用“where”参数过滤查询的概念,但我注意到,当我尝试从深层嵌套查询中获取对象时,它变得有点不可能。所以说我有'domestic_worker_nextofkin'查询应该得到全名,mobile_phone1和'archived'_is_null等于true的关系,如下所示:

上面的查询完成了它的预期工作并获取了全名、mobile_phone1 和关系。

但我目前的问题是,当这个查询被深度嵌套时,如下所示(带星号的代码):

它显示“where”参数以红色突出显示,这可能意味着“where”参数不应该放在那里,这对我来说似乎相当混乱。谁能解释为什么会发生这种情况并向我展示一个解决方法来完成我正在尝试执行的任务?谢谢。