Hasura Authentication Passport.js Auth Webhook 不起作用

Posted

技术标签:

【中文标题】Hasura Authentication Passport.js Auth Webhook 不起作用【英文标题】:Hasura Authentication Passport.js Auth Webhook does not work 【发布时间】:2020-01-05 17:59:00 【问题描述】:

我尝试使用 Passport.js Auth Webhook Boilerplate here 在我的应用程序中设置自定义身份验证。我按照自述文件尝试先在本地测试设置。我可以通过 Postman 使用 /signup API 成功创建用户,还可以使用 /login API 接收令牌。我实现了一个简单的登录表单并尝试使用已创建用户的用户名和密码向/login API 发出请求,然后我收到带有令牌的响应并将其保存在本地存储中以将Authorization: Bearer <token> 添加到标题。然后,当我试图访问一个我发出 graphQL 请求的页面时,我只得到了这个Error: GraphQL error: Internal Server Error。如果不使用通过 webhook 进行的身份验证处理,则通过在标头中使用 HASURA_GRAPHQL_ADMIN_SECRET 可以正常工作。这个我昨天试过了。今天,当我像昨天一样在本地启动所有服务器时,我什至无法通过 Postman 获得成功的请求。值得一提的是,我添加了HASURA_GRAPHQL_AUTH_HOOK -> http://localhost:8081/webhook(我从授权标头中删除了管理员密码以启用 webhook),并且还为用户设置了访问 todos 表的权限,如 here 所示

我可能做错了什么?这是我的设置。如果您需要更多信息,请告诉我

这是为了让 Hasura GraphQL 引擎和 Postgres 作为 Docker 容器运行,显示为 here(我的 docker-compose.yaml 文件):

version: '3.6'
services:
  postgres:
    image: postgres
    restart: always
    ports:
    - "5432:5432"
    volumes:
    - db_data:/var/lib/postgresql/data
  graphql-engine:
    image: hasura/graphql-engine:v1.0.0-beta.6
    ports:
    - "8080:8080"
    depends_on:
    - "postgres"
    restart: always
    environment:
      HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:@postgres:5432/postgres
      HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console
      HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log
      HASURA_GRAPHQL_ADMIN_SECRET: secret
      HASURA_GRAPHQL_AUTH_HOOK: http://localhost:8081/webhook
volumes:
  db_data:

passport.js 样板项目在 http://localhost:8081 上运行

hasura/graphql 引擎正在 http://localhost:8080 上运行

主应用在http://localhost:3000上运行

【问题讨论】:

如果您在 docker 中使用 localhost:8081 URL,您需要在 0.0.0.0 公开您的 Auth Webhook 服务器或使用 network_mode: host 设置 docker 以在主机模式下运行。对于 Mac,您可以将 localhost 替换为 host.docker.internal 以便容器访问主机的身份验证服务器。 感谢@praveenweb,这是问题的一部分 【参考方案1】:

所以有两个问题:

    就像在 cmets 中写的 @praveenweb 一样(在我的情况下是 mac),我必须将 localhost 替换为 host.docker.internal 以便容器访问主机的身份验证服务器。所以不是HASURA_GRAPHQL_AUTH_HOOK: http://localhost:8081/webhook -> HASURA_GRAPHQL_AUTH_HOOK: http://host.docker.internal:8081/webhook

    我第二天没有成功响应的原因是我完全忘记在环境变量中设置DATABASE_URL,如显示here。所以在我的情况下export DATABASE_URL=postgres://postgres:@localhost:5432/postgres

现在一切都按预期进行。希望这对其他人也有帮助。

【讨论】:

以上是关于Hasura Authentication Passport.js Auth Webhook 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将 Hasura 用作数据访问层的最佳和正确方法是啥

Hasura:允许用户不为自己的帖子投票

hasura graphql 模式拼接demo

如何在Hasura上创建cron作业?

Hasura Actions 稳定版发布

Hasura Actions 稳定版发布