微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[slack][bolt app] 如何获取与当前请求关联的范围?

如何解决[slack][bolt app] 如何获取与当前请求关联的范围?

我正在使用 slack bolt guides 推荐的 nodejs 和 expressreceiver 开发标准的 slack bolt 应用程序。

一个问题是,我如何才能看到与当前机器人令牌关联的范围?

例如:

  • 1 月 1 日 - 客户 A 仅在 [user.profile:read] 范围内进行安装
  • 1 月 10 日 - 我们公司添加一个仅适用于安装的新范围,所以现在是:[user.profile:read,user.profile:write]
  • 1 月 12 日 - 客户 B 安装了一个带有 user.profile:write 的新应用

现在,在我的事件/操作处理程序中,我想知道当前请求是否可以访问 user.profile:write,然后才向用户的个人资料中写入一些内容

我看到每个 slack 请求都会调用“fetchInstallation”(我认为这是认 authorizefn 调用的一部分),但我不确定如何在我的 slack 处理程序中访问安装对象中间件。我还假设安装对象具有请求的工作区已安装的范围。

注意:我们关心这个是因为我们想添加新的权限,但我们希望逐步迁移老客户,而不是强迫他们在 1 月 10 日重新安装应用。

有什么帮助吗?

解决方法

对 fetchInstallation 的调用将返回一个包含您需要的信息的 Installation 对象:

bot:{scopes: Array(4),token: 'xoxb-xxxxx',userId: 'xxxx',id: 'xxxx'}
0:'commands'
1:'chat:write.public'
2:'chat:write'
3:'groups:write'
length:4
,

您可以在这样的侦听器中获取范围

async function scopeTestListener({client,context,next}) {
  const { botToken } = context
  var result = await client.auth.test({token: botToken})
  console.log(result.response_metadata.scopes)
  await next();
}


app.action('some_action',scopeTestListener,async ({ action,ack,body,client,context }) => { ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。