如何使用 REST API 网关非代理集成从 lambda 返回自定义标头

问题描述 投票:0回答:1

我已经设置了 REST API 网关非代理集成

当我响应 200OK 时,我有这个 NodeJS lambda 代码

return {
          statusCode: 200,
          headers: {"Content-type": "application/json", "set-cookie": "please-work"},
          body: JSON.stringify(response)
       };

REST API 网关 - 方法响应:

这里我定义了

set-cookie
标题enter image description here

REST API 网关 - 集成响应: 我有这样的设置:

enter image description here

问题:

您可以看到我确实将

set-cookie
标头映射到响应
set-cookie
标头。

但是我仍然没有看到这个标头返回给客户端 - 为什么?我如何将

set-cookie
标头或任何其他标头传递给客户端?

node.js aws-lambda aws-api-gateway
1个回答
0
投票

Lambda 和 Cookie 相关标头

考虑带有这些标头的 HTTP 响应。请注意,set-cookie 可以出现多次:

set-cookie: access-token=aDeSh7bC0qsTb...; Path=/; HttpOnly; Secure; SameSite=Strict
set-cookie: refresh-token=W16w1dU4N7pZM...; Path=/refresh; HttpOnly; Secure; SameSite=Strict
x-csrf: abc123

您可以用这样的代码来表示,其中 lambda 对象模型支持单值标头和多值标头:

const handler = async (event: APIGatewayProxyEvent) : Promise<APIGatewayProxyResult> => {

    return {
        statusCode: 200,
        headers: {
            "x-csrf": "abc123"
        },
        multiValueHeaders: {
            "set-cookie": [
                cookieSerializer.getAccessTokenCookie(),
                cookieSerializer.getRefreshTokenCookie(),
            ]
        }
        body: JSON.stringify({})
   };
}

对象模型

如果您查看 TypeScript 类型定义,您会看到 lambda 响应的结构:

export interface APIGatewayProxyResult {
    statusCode: number;
    headers?:
        | {
            [header: string]: boolean | number | string;
        }
        | undefined;
    multiValueHeaders?:
        | {
            [header: string]: Array<boolean | number | string>;
        }
        | undefined;
    body: string;
    isBase64Encoded?: boolean | undefined;
}

网关响应

我非常确定您不需要在 AWS API 网关中执行任何操作即可接收响应。通常,您仅在需要自定义错误响应时才这样做。

© www.soinside.com 2019 - 2024. All rights reserved.