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

Slack 的 files.delete API 总是返回 cant_delete_file 错误

如何解决Slack 的 files.delete API 总是返回 cant_delete_file 错误

我正在尝试编写一个脚本来从我的 Slack 工作区中删除文件

按照 Slack API 文档,我创建了一个应用程序,并为其指定了 channels:joinchannels:managechannels:readfiles:readfiles: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 表示:

经过身份验证的用户无权删除文件

我只能假设这是因为我的用户是机器人,而不是最初上传文件用户

因为我是工作区管理员,所以我希望我能够列出和删除所有文件如果我要使用我的用户凭据进行身份验证,但是 Basic App Setup docs 没有说如何使用用户凭据进行身份验证,即使它们包含暗示某些操作可能需要用户令牌的语言:

如果您需要充当特定用户(例如,代表用户发布消息,或设置用户的状态),则需要用户令牌。

是否有人知道如何:

  1. 使用应用程序令牌进行身份验证时删除文件;或
  2. 从应用内获取用户令牌?

解决方法

虽然没有明确记录,但不允许应用令牌删除其他用户上传的文件。

为此,需要通过 OAuth 将应用安装到工作区中,授予应用一个用户令牌,该令牌继承安装它的用户的权限。

如果该用户是工作区管理员,则该应用将能够删除任何文件,无论是谁上传的。详情见https://api.slack.com/legacy/oauth

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