【问题标题】:Parsing request body prohibits request signature verification解析请求体禁止请求签名验证
【发布时间】:2020-03-11 18:31:40
【问题描述】:

我正在尝试使用 Lambda 函数构建无服务器 Slackbot。在通过 Slack 事件 API 验证请求 URL 时出现错误。 @slack/events-api 是我用来捕获松弛事件的依赖项。

这是我的代码。

const sls = require('serverless-http');
const { createEventAdapter } = require('@slack/events-api');
require('dotenv').config();

const { SLACK_SIGNING_SECRET } = process.env
const slackEvents = createEventAdapter( SLACK_SIGNING_SECRET || '' );


slackEvents.on('message', async event => {
  console.log('received!')
});


module.exports.server = sls(slackEvents.requestListener());

这是我在验证请求 url 时遇到的错误

Slack 请求 URL 验证

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: node.js aws-lambda slack-api serverless-framework ngrok


    【解决方案1】:

    刚刚遇到了这个确切的问题,并在node-slack-events 中查看了http-handler.js。

    我们所要做的就是在serverless-http 解析它之前将原始请求正文存储为rawBody。

    serverless-http 允许您在将其发送到应用程序之前 transform the request — 修复的好机会:

    module.exports.handler = serverless(app, {
      request(request) {
        request.rawBody = request.body;
      },
    });
    

    【讨论】:

      【解决方案2】:

      我不确定如何准确解决您的问题,但我知道是什么原因造成的。

      您正在使用的库 serverless-http 解析 Slack 发送的 JSON 正文。这会导致抛出错误,因为 slack-api-sdk 期望解析原始请求正文本身。

      您能否尝试删除 serverless-http 并仅响应 API Gateway 事件?

      【讨论】:

      • 我已将其删除。使用不同的堆栈跟踪仍然会出现相同的错误。
      • 太好了!你能分享堆栈跟踪和你的新处理程序逻辑吗?
      • 嗨亚伦,这是我的新 logic 和 stack_trace。请你看一下。
      • 这是CloudWatch_log。
      猜你喜欢
      • 2018-08-25
      • 2015-04-01
      • 1970-01-01
      • 2016-08-27
      • 2014-08-23
      • 2010-09-18
      • 2019-10-07
      • 2013-01-25
      相关资源
      最近更新 更多