0

我正在研究使用 Drupal 6 中的服务模块从一些 JSON 格式的自定义视图中获取数据。我在http://drupal.org/node/308629上关注了一篇文章并创建了这个项目的 vb 版本(推送到https://sharpred@github.com/sharpred/ConsoleApplicationDrupal.git

第一次运行我的代码时,我得到“无效的 API 密钥”,随后的运行返回“令牌之前已用于请求。使用另一个 nonce 密钥重试”。第二个错误是有点虚假的 IMO,因为我的代码每次运行时都会创建一个新的随机随机数。

我还注意到第一次运行在 services_timestamp_nonce 表中创建了一个条目,其中仅包含时间戳,但不包含 nonce 或域值。如果我删除这条记录,它会回到“无效的 api 密钥”消息。

该代码未经身份验证即可工作,并且来自站点上 /admin/build/services/browse/views.get 的方法调用也可以正常工作。

关于为什么这不起作用的任何想法?

搜索谷歌,“无效 api 密钥”的最常见来源似乎是使用的时间戳错误或 api 密钥与创建哈希时使用的域不匹配。据我所知,在我的情况下两者都不是真的。我在https://gist.github.com/1151222创建了用于创建时间戳和哈希的代码要点

任何人都可以帮助使这个过程发挥作用吗?

4

1 回答 1

0

在浏览了服务模块的代码后,我发现了这一点。我的多部分表单中的一些值没有用引号括起来,因此被 services_key_auth 模块作为空值处理。这意味着在第一次通过时,只有时间戳被写入 nonce 表,并且由于引号,计算的哈希与我的哈希不匹配。在随后的更新中,该模块有效地搜索 null 的 nonce 值,并在数据库中找到一个,返回之前使用过的结果。如果其他人遇到此问题,请拉出我上面链接的 github 项目并查看我的代码。

于 2011-08-18T08:17:37.910 回答