解析请求正文禁止请求签名验证

时间:2019-11-15 15:11:54

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

我正在尝试使用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());

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

enter image description here

  

松弛请求URL验证

enter image description here

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

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

您正在使用的库serverless-http解析Slack发送的JSON正文。这会引发错误,因为slack-api-sdk希望解析原始请求主体本身。

您可以尝试删除public static void main(String... args) { int a[]=new int[10]; for(int i = a.length-1; i>=0 ; i--){ a[a.length-i-1] = i; } System.out.println(Arrays.toString(a)); } 并仅响应API网关事件吗?

答案 1 :(得分:0)

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

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

serverless-http使您transform the request在发送到应用程序之前-进行修复的绝佳机会:

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