如何强制用户登录后才可使用Bot Framework Composer创建的机器人
Bot Framework Composer 实现强制登录的操作方案
默认的OAuth Prompt组件设计为可选验证逻辑,用户点击取消后会自动继续后续对话流,无法实现强制拦截,要实现登录后才能收发消息的效果,按以下步骤配置即可:
- 配置全局前置拦截
在Composer的项目设置中开启对话前置拦截规则,所有用户消息进入业务对话流之前,先调用内置的获取用户令牌动作,传入你在Azure Bot渠道配置中绑定的OAuth连接名,将返回结果存入dialog.loginToken变量:- 如果
dialog.loginToken不为空且在有效期内,正常放行到对应业务对话 - 如果
dialog.loginToken为空/失效,直接将对话流重定向到专用登录对话,不执行任何业务逻辑、不返回任何业务相关内容
- 如果
- 改造专用登录对话逻辑,取消旁路出口
新建独立的登录校验对话,不要把OAuth Prompt直接嵌在业务流程开头:- 在对话起始节点放置OAuth Prompt组件,将组件的
AllowInterruptions参数设置为false,禁止用户在登录环节触发其他意图绕开验证 - 针对OAuth Prompt的返回结果做严格分支判断:
- 拿到有效Token:标记用户登录状态为已验证,跳转回用户最初请求的业务节点
- 返回取消/登录失败/超时结果:直接给用户发送提示 您必须完成账号登录才能使用机器人功能,请点击登录卡片完成验证,然后循环回到当前对话的OAuth Prompt节点,不设置任何跳转到业务功能的出口
- 在对话起始节点放置OAuth Prompt组件,将组件的
- 补全全局意图的拦截规则
所有配置了全局触发的意图(比如菜单、帮助、常见问题这类不需要走特定业务流程的指令),都要在触发后的第一个节点增加登录态判断,未登录状态下统一拦截,直接重定向到登录对话,避免用户通过全局指令绕开登录校验。
注意:不要只在主对话开头放一次OAuth Prompt就认为完成了登录校验,该组件本身没有强制拦截的设计,必须配合全局拦截+登录失败重入的循环逻辑,才能彻底堵上绕过登录的路径。
内容的提问来源于stack exchange,提问作者RYUB3N
相关产品推荐
相关产品推荐

