Hasura whatsapp 克隆 JWT 样板 - "users" table 如何填充?
Hasura whatsapp clone JWT boilerplate - how does "users" table get populated?
我已经构建并启动了 whatsapp clone tutorial 的所有组件。
我的身份验证服务器正在使用对称加密生成有效的 JWT(根据 jwt.io)。 JWT 似乎由 react-app 正确传递,因为我可以注册和登录。
现在我有一些问题,我无法在使用 react-app 登录后立即解决。
登录后,我们的用户被重定向到 components/ChatsListScreen/ChatsList.tsx
。在这里,我们要显示基于已连接用户的数据(使用 useMe()
)。我的问题是 useMe()
returns 一个空对象。
我还在 hasura 服务器上收到以下错误(运行 in docker):
{"timestamp":"2019-10-13T08:21:26.663+0000","level":"error","type":"http-log","detail":{"operation":{"query_execution_time":null,"user_vars":{"x-hasura-role":"user","x-hasura-user-id":"4"},"error":{"path":"$.variableValues","error":"expecting a value for non-nullable variable: userId of type: Int! in variableValues","code":"validation-failed"},"request_id":"5a8c6897-69dd-410e-bd10-f637750e1957","response_size":148,"query":{"variables":{},"operationName":"ChatsListQuery","query":"query ChatsListQuery($userId: Int!) {\n chat(order_by: [{messages_aggregate: {max: {created_at: desc}}}]) {\n ...chat\n users(where: {user_id: {_neq: $userId}}) {\n user {\n ...user\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment chat on chat {\n id\n name\n picture\n owner_id\n created_at\n messages(order_by: [{created_at: asc}]) {\n ...message\n __typename\n }\n __typename\n}\n\nfragment message on message {\n id\n chat_id\n sender {\n id\n name\n __typename\n }\n content\n created_at\n __typename\n}\n\nfragment user on users {\n id\n username\n name\n picture\n __typename\n}\n"}},"http_info":{"status":200,"http_version":"HTTP/1.1","url":"/v1/graphql","ip":"172.18.0.1","method":"POST"}}}
如您所见,x-hasura-user-id
已正确传递,但查询需要一个空的 userId
。
根据我的日志和我的理解,这是由于 useMe()
钩子的 fetchUser
是空的。
现在这是空的原因很可能是因为我的hasura 数据库是空的。 auth 服务器数据库有用户(已登录的用户),但来自 hasura 的 users
table 是空的。
hasura 的 users
table 是如何填充的?
此样板假定身份验证服务器和 Hasura API 都读取和写入同一数据库,其中 users
table 是共享实体。
Post注册,用户被插入数据库(用户table)。这是关于它在 Auth 服务器中发生的位置的 source。
如果您已将身份验证服务器配置为写入不同的数据库,那么您需要同步用户数据post注册。
我已经构建并启动了 whatsapp clone tutorial 的所有组件。 我的身份验证服务器正在使用对称加密生成有效的 JWT(根据 jwt.io)。 JWT 似乎由 react-app 正确传递,因为我可以注册和登录。 现在我有一些问题,我无法在使用 react-app 登录后立即解决。
登录后,我们的用户被重定向到 components/ChatsListScreen/ChatsList.tsx
。在这里,我们要显示基于已连接用户的数据(使用 useMe()
)。我的问题是 useMe()
returns 一个空对象。
我还在 hasura 服务器上收到以下错误(运行 in docker):
{"timestamp":"2019-10-13T08:21:26.663+0000","level":"error","type":"http-log","detail":{"operation":{"query_execution_time":null,"user_vars":{"x-hasura-role":"user","x-hasura-user-id":"4"},"error":{"path":"$.variableValues","error":"expecting a value for non-nullable variable: userId of type: Int! in variableValues","code":"validation-failed"},"request_id":"5a8c6897-69dd-410e-bd10-f637750e1957","response_size":148,"query":{"variables":{},"operationName":"ChatsListQuery","query":"query ChatsListQuery($userId: Int!) {\n chat(order_by: [{messages_aggregate: {max: {created_at: desc}}}]) {\n ...chat\n users(where: {user_id: {_neq: $userId}}) {\n user {\n ...user\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment chat on chat {\n id\n name\n picture\n owner_id\n created_at\n messages(order_by: [{created_at: asc}]) {\n ...message\n __typename\n }\n __typename\n}\n\nfragment message on message {\n id\n chat_id\n sender {\n id\n name\n __typename\n }\n content\n created_at\n __typename\n}\n\nfragment user on users {\n id\n username\n name\n picture\n __typename\n}\n"}},"http_info":{"status":200,"http_version":"HTTP/1.1","url":"/v1/graphql","ip":"172.18.0.1","method":"POST"}}}
如您所见,x-hasura-user-id
已正确传递,但查询需要一个空的 userId
。
根据我的日志和我的理解,这是由于 useMe()
钩子的 fetchUser
是空的。
现在这是空的原因很可能是因为我的hasura 数据库是空的。 auth 服务器数据库有用户(已登录的用户),但来自 hasura 的 users
table 是空的。
hasura 的 users
table 是如何填充的?
此样板假定身份验证服务器和 Hasura API 都读取和写入同一数据库,其中 users
table 是共享实体。
Post注册,用户被插入数据库(用户table)。这是关于它在 Auth 服务器中发生的位置的 source。
如果您已将身份验证服务器配置为写入不同的数据库,那么您需要同步用户数据post注册。