【问题标题】:How to verify JWT in middleware function dialogflow如何在中间件函数对话框流中验证 JWT
【发布时间】:2020-05-07 08:14:40
【问题描述】:

我们正在发送带有 JWT 令牌的 HTTP 标头,我们已在对话框流控制台中配置了此标头。

我们希望在上一步中验证此令牌以将请求发送到特定意图,例如welcome_intent。

我们使用“中间件”作为上一步,验证是正确的,它适用于每一次通信。我们想知道,如何

如果 JWT 错误,我们希望返回错误而不继续关联的意图,例如:welcome_intent。

我们尝试在“中间件”中使用“conv.close”结束流程,但我们看到流程仍在继续,并转到与查询关联的意图。

我们怎样才能跳出流程并在中间件函数中返回错误?

const {
    dialogflow
} = require('actions-on-google');

const fulfillment = dialogflow({
    clientId: "clientIdDialogflow",
    debug: true
});

const jwt = require('jsonwebtoken');

fulfillment.middleware(async (conv) => {
    let tokenIncorrect = await utils.verifyJWT(conv);
    if (tokenIncorrect) {
        conv.close("Lo siento pero no puedes continuar con la conversación.");
    }
});

// Intents functions 
fulfillment.intent("welcome_intent", .....);

【问题讨论】:

    标签: dialogflow-es actions-on-google dialogflow-es-fulfillment


    【解决方案1】:

    您应该能够抛出 UnauthorizedError 来终止 Intent 处理程序中的对话。

    以下是一些相关文档和一些示例代码:https://actions-on-google.github.io/actions-on-google-nodejs/2.12.0/classes/_service_actionssdk_conversation_conversation_.unauthorizederror.html

    但是,这不适用于中间件。正如您在https://github.com/actions-on-google/actions-on-google-nodejs/blob/9f8c250a385990d28705b3658364c74aa3c19adb/src/service/actionssdk/actionssdk.ts#L345-L350 中看到的那样,中间件在 UnauthorizedError 处理包装对意图处理程序的调用之前应用:https://github.com/actions-on-google/actions-on-google-nodejs/blob/9f8c250a385990d28705b3658364c74aa3c19adb/src/service/actionssdk/actionssdk.ts#L370-L389

    在实施时,不能使用中间件直接优雅地结束履行。但是,您可以修改 conv 对象。例如,您可以在这些情况下更改目标 Intent (conv.intent = 'UNAUTHORIZED'),然后为该 Intent 添加一个处理程序,该处理程序始终会引发 UnauthorizedError

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多