首页 > 解决方案 > 返回 hasura 变量时出错 - Auth Webhook - AWS Lambda

问题描述

我正在尝试在nodejs 12AWS Lambda 中返回 hasura 变量,但出现错误:

GraphQL 错误:来自授权挂钩的无效响应:$.hasuraVariables 中的错误:解析文本失败,预期字符串,但遇到对象

我的代码:

let hasuraVariables = {
    "X-Hasura-Role": "user", 
    "X-Hasura-User-Id": user.id, 
};

if (user.publisher && user.publisher.id) {
    Object.assign(hasuraVariables, {
        "X-Hasura-Publisher-Id": user.publisher.id.toString()
    }) 
}

const body = JSON.stringify({
    hasuraVariables
});
console.log("body", body)

return {
    "statusCode": "200",
    "body": body
}

如果我记录body它:

{"hasuraVariables":{"X-Hasura-Role":"user","X-Hasura-User-Id":"d61ea04f-421b-48a8-92a2-de6d00491425","X-Hasura-Publisher-Id": “110”}}

如果我先返回没有字符串化的变量:

return {
    "statusCode": "200",
    "body": hasuraVariables
}

我得到错误:

GraphQL 错误:来自授权钩子的无效响应:$ 中的错误:读取失败:满足。'X-Hasura-Role':'user','X-Hasura-User-Id':'d61ea04f-421b-48a8-92a2-de6d00491425','X-Hasura-Pub' 期望对象键

返回变量的正确方法是什么?

标签: node.jsaws-lambdahasura

解决方案


我相信你应该使用

const body = JSON.stringify(hasuraVariables);

代替

const body = JSON.stringify({
    hasuraVariables
});

文档中,响应应该是直接带有键/值标头对的对象,而不是hasuraVariables像您正在做的那样在键下方。此示例还说明了您应该如何做出此响应。


推荐阅读