Docker Hasura Authentication Passport.js Auth Webhook不起作用

Docker Hasura Authentication Passport.js Auth Webhook不起作用,docker,graphql,apollo-client,hasura,Docker,Graphql,Apollo Client,Hasura,我尝试使用Passport.js Auth Webhook样板文件在我的应用程序中设置自定义身份验证。我遵循自述文件,首先尝试在本地测试设置。我可以使用/signup API通过Postman成功创建用户,还可以使用/login API接收令牌。我实现了一个简单的登录表单,并尝试从一个已经创建的用户那里使用用户名和密码向/login API发出请求,然后我收到了带有令牌的响应,并将其保存在本地存储器中,以将Authorization:Bearer添加到头中。然后,当我试图访问一个已经发出grap

我尝试使用Passport.js Auth Webhook样板文件在我的应用程序中设置自定义身份验证。我遵循自述文件,首先尝试在本地测试设置。我可以使用/signup API通过Postman成功创建用户,还可以使用/login API接收令牌。我实现了一个简单的登录表单,并尝试从一个已经创建的用户那里使用用户名和密码向/login API发出请求,然后我收到了带有令牌的响应,并将其保存在本地存储器中,以将Authorization:Bearer添加到头中。然后,当我试图访问一个已经发出graphQL请求的页面时,我只得到了这个错误:graphQL错误:内部服务器错误。在不使用通过webhook的身份验证处理的情况下,通过在头中使用HASURA_GRAPHQL_ADMIN_SECRET,它可以顺利工作。这是我昨天试过的。今天,当我像昨天一样在本地启动所有服务器时,我甚至无法通过邮递员获得成功的请求。同样重要的是,我添加了HASURA_GRAPHQL_AUTH_HOOK->http://localhost:8081/webhook 我从authorization头中删除了admin secret以启用webhook,并为用户设置访问todos表的权限,如图所示

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

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

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

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


主应用程序正在上运行http://localhost:3000因此有两个问题:

就像我在mac上的评论中写的那样,我必须用host.docker.internal替换localhost,容器才能访问主机的身份验证服务器。因此,与HASURA_GRAPHQL_AUTH_HOOK不同:http://localhost:8081/webhook ->HASURA_GRAPHQL_AUTH_HOOK:http://host.docker.internal:8081/webhook

第二天我没有得到成功响应的原因是我完全忘记了在环境变量中设置数据库URL,如图所示。所以在我的例子中,导出数据库=postgres://postgres:@本地主机:5432/postgres


现在一切正常。希望这对其他人也有帮助。

所以有两个问题:

就像我在mac上的评论中写的那样,我必须用host.docker.internal替换localhost,容器才能访问主机的身份验证服务器。因此,与HASURA_GRAPHQL_AUTH_HOOK不同:http://localhost:8081/webhook ->HASURA_GRAPHQL_AUTH_HOOK:http://host.docker.internal:8081/webhook

第二天我没有得到成功响应的原因是我完全忘记了在环境变量中设置数据库URL,如图所示。所以在我的例子中,导出数据库=postgres://postgres:@本地主机:5432/postgres


现在一切正常。希望这对其他人也有帮助。

如果您在docker中使用URL,则需要在0.0.0.0中公开您的Auth Webhook服务器,或者使用网络模式:主机将docker设置为在主机模式下运行。对于Mac,您可以将localhost替换为host.docker.internal,以便容器访问主机的身份验证服务器。感谢@praveenweb,这是问题的一部分。如果您在docker内部使用URL,则需要在0.0.0.0公开您的身份验证Webhook服务器,或者使用network\u mode:host将docker设置为在主机模式下运行。对于Mac,您可以将localhost替换为host.docker.internal,以便容器访问主机的身份验证服务器。感谢@praveenweb这是问题的一部分
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: