slack - Slack 的 files.delete API 总是返回 cant_delete_file 错误
问题描述
我正在尝试编写一个脚本来从我的 Slack 工作区中删除旧文件。
按照 Slack API 文档,我创建了一个应用程序,为其提供channels:join
、channels:manage
、channels:read
、files:read
和files:write
范围,并将其安装在目标工作区中。
我的应用程序可以列出频道、加入频道和列出该频道中的文件,但每当我尝试删除文件时,我都会收到如下所示的响应:
DELETE https://slack.com/api/files.delete?token=xoxb-xxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx&file=Fxxxxxxxxxx
User-Agent: PostmanRuntime/7.24.1
Accept: */*
Cache-Control: no-cache
Postman-Token: 8f6854b4-794c-4685-892c-c9fafc03827e
Host: slack.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 200 OK
date: Sat, 09 Jan 2021 19:23:28 GMT
server: Apache
x-xss-protection: 0
pragma: no-cache
cache-control: private, no-cache, no-store, must-revalidate
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-slack-req-id: 227ef4f9bb4c85c42d6f1c7fb33ddac0
x-content-type-options: nosniff
referrer-policy: no-referrer
access-control-expose-headers: x-slack-req-id, retry-after
x-slack-backend: r
x-oauth-scopes: files:read,files:write,users:read,channels:read,channels:join,channels:manage,remote_files:write
x-accepted-oauth-scopes: files:write
expires: Mon, 26 Jul 1997 05:00:00 GMT
access-control-allow-headers: slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, x-b3-flags
vary: Accept-Encoding
content-encoding: gzip
content-length: 59
content-type: application/json; charset=utf-8
x-envoy-upstream-service-time: 26
x-backend: files_normal files_canary_with_overflow files_control_with_overflow
x-server: 10.128.70.109:80
x-via: envoy-www-iad-kyvf, haproxy-edge-iad-2ql3
x-slack-shared-secret-outcome: shared-secret
via: envoy-www-iad-kyvf
{
"ok": false,
"error": "cant_delete_file"
}
根据files.delete端点的 API 文档,cant_delete_file
意味着:
经过身份验证的用户无权删除此文件。
我只能假设这是因为我的用户是机器人,而不是最初上传文件的用户。
因为我是工作区管理员,所以如果我要使用我的用户凭据进行身份验证,我希望能够列出和删除所有文件,但是基本应用程序设置文档没有说明如何使用用户凭据进行身份验证,即使他们包含暗示某些操作可能需要用户令牌的语言:
如果您需要充当特定用户(例如,代表用户发布消息或设置用户状态),则需要用户令牌。
是否有人知道如何:
- 使用 App Token 进行身份验证时删除文件;或者
- 从应用程序中获取用户令牌?
解决方案
虽然没有明确记录,但 App Token 不允许删除其他用户上传的文件。
为此,需要通过 OAuth 将应用程序安装到工作区,授予应用程序一个用户令牌,该用户令牌继承安装它的用户的权限。
如果该用户是工作区管理员,则应用程序将能够删除任何文件,无论是谁上传的。有关详细信息,请参阅https://api.slack.com/legacy/oauth
推荐阅读
- python-3.x - 通过迭代字符串,我怎样才能提取更多的索引和相应的值?
- csv - Hazelcast 外部排序。对大 csv 中的记录进行排序
- java - 使用java从特定标签中提取字符串
- pandas - 填充锚点之间的缺失值
- excel - 我无法让我的 VBA 代码保存到创建的文件夹
- magento - 将模式从默认更改为开发人员收到错误
- angular - “元素”类型上不存在角度属性“偏移宽度”
- logging - python函数对通用代码执行计时并将其写入日志文件
- javascript - 从浏览器 JS 向 AWS Cognito 用户池进行身份验证
- javascript - 响应栏不显示