BotBuilder节点SDK是否主动剥离存储在dialogData
对象中的所有内容?
例如,我创建了一个简单的循环,并将正则表达式存储在session.dialogData.questions
中。当我在存储它后控制台日志时,我可以看到我的正则表达式按预期存储:
{
validation: /^[0-9]{19}$/,
}
但是,当我尝试在瀑布的下一步中记录相同的
session.dialogData.questions
对象时,则正则表达式似乎已转换为空对象: {
validation: {}
}
我认为这是故意防止XSS和其他类型的利用的尝试吗?
该示例的代码可以在下面找到:
const builder = require('botbuilder')
const lib = new builder.Library('FormBuilder')
lib.dialog('/', [
(session, args) => {
session.dialogData.questions = {
validation: /^[0-9]{19}$/
}
console.log(session.dialogData.questions)
builder.Prompts.confirm(session, 'Would you like to proceed?')
},
(session, results) => {
console.log(session.dialogData.questions)
}
])
module.exports.createLibrary = () => {
return lib.clone()
}
最佳答案
关于您的第一个问题,没有一个SDK不会主动将任何内容从dialogData对象中剥离。除了正则表达式之外的任何东西...
我不确定为什么会这样,但是暂时我建议将您的模式存储为字符串'^[0-9]{19}$'
,然后在需要时通过new RegExp(session.dialogData.questions.validation)
构造一个新的正则表达式。
我尝试存储使用this.questions.validation
构造新RegExp的方法,但同样也将其删除。
编辑:
根据Ezequiel的评论,这最终并不是Bot Framework的问题。无法在JSON中存储不可序列化的数据。