作为我今天在 [IndieWebCamp Berlin](https://indieweb.org/2017/Berlin) 工作冲刺的一部分，我设法修复了一个令人停止的错误，该错误显然自 2017 年 9 月 28 日 [Dropbox 完全退役其 API 以来，一直在 [Neotoma.io](https://neotoma.io) 上的 [sync-server](https://github.com/neotoma/sync-server) 生产中出现v1](https://blogs.dropbox.com/developers/2017/09/api-v1-shutdown-details/) 支持 API v2。

直到本周我才意识到这个错误，因为生产中的错误处理尚未设置为通知我（通过电子邮件或其他方式），但设置该通知现在是[一项优先任务](https://github.com/neotoma/sync-server/issues/87)，以避免将来出现此类无声问题。

深入研究代码后，发现 Dropbox 的 [Passport](http://www.passportjs.org/) 实现在[其策略](https://github.com/florianheinemann/passport-dropbox-oauth2)初始化时没有传递“apiVersion”参数，因此，在我没有意识到的情况下，它默认为 Dropbox 的 API v1。

我添加了“apiVersion”[作为参数](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-25ac49459f3ccaa62fa691b8b449625cR69)，也作为[存储上的属性] model](https://github.com/neotoma/sync-server/commit/d9b1f15400201ef962a8dea79a121ad9d996c686#diff-430f49ef85b837131a35d1dd553659aeR23)，特别将其设置为“2”用于Dropbox的存储文档。

*注意：这个属性显然需要是一个字符串，而不是一个整数，后者在我尝试时失败了。*

````
req.strategy = 新的passportStrategy.Strategy({
  api版本：文档.api版本，
  clientID: 文档.clientId,
  clientSecret：文档.clientSecret，
  ConsumerKey: document.clientId,
  消费者秘密：document.clientSecret，
  callbackURL: `${req.protocol}://${req.get('host')}${path.resolve('/', Model.modelType(), document.slug, 'auth-callback')}`,
  passReqToCallback：真，
  profileFields: ['id', '显示名称', '电子邮件']
}...
````

因此，Dropbox 身份验证现在再次起作用，我已经能够为我的 Foursquare / Swarm 签到运行备份作业，将自今年夏天早些时候运行备份以来的最新作业同步到我的 Dropbox。