解决Slack Mac客户端无限转圈问题

0x01 症状

症状为Slack Mac客户端无限转圈,刷新无效。但是网页版登录正常。

0x02 收集

由于Slack的Mac客户端关闭了右键查看各种信息的功能。首先要做的就是拿到更多信息辅助判断。一般程序都会写日志,日志就会打开文件句柄,然后通过活动监视器去看到底哪个文件被打开了。

经过一番查找,的确发现了一个像是日志的文件句柄,文件名为/Users/[用户名]/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/logs/webapp-T03UMNDS2-console.log。经过tail发现的确是日志,于是刷新页面,观察日志输出:

看起来应该是某些资源执行的时候有问题。比如执行这个文件https://a.slack-edge.com/bv1-5/rollup-core_required_ts.9099665e649e19373615.min.js遇到了问题。我把这个文件放到浏览器中访问,看起来资源是完整的。

0x03 分析

一般而言这种情况下多半是缓存出了问题。由于缓存了不完整的资源,不会请求新资源也不能正常加载。所以接下来尝试找到缓存并清理缓存

0x04 解决

Slack的文件分布在各处,不仔细找很难找到缓存在哪。不过也有一个比较快的方式。缓存一般都是文件,是文件就要被打开,就有文件句柄,就能通过活动监视器找到。于是找了一番,找到了一个名字里面带Cache的路径/Users/[用户名]/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/Cache

进入,发现了一堆f_*****的文件,rm *删之。

然后重启Slack,问题解决~

0x05 回顾

看起来应当是Slack使用的Electron在处理缓存文件时存在问题。如果缓存文件不完整或者被修改,没有过超时期,依然会被加载。估计也是,因为缓存头只有ETag标签,并没有哈希值,所以被修改也是比较难发现。对于缓存的完整性问题,需要有更好的方案。