首页 > 解决方案 > MediaWiki:获取“readapidenied”错误而不是登录令牌

问题描述

这是一个相当令人费解的问题。我有多个 MediaWiki 安装。在这种特定情况下:版本 1.34。

现在我可以登录所有这些 MediaWiki。一切正常。

现在我可以通过 API 访问所有这些 MediaWiki——除了一个。奇怪的是:它们的配置几乎相同。我什至将配置从一个一切正常的wiki复制到第二个wiki。

更准确地说。如果我发送...

/wikiA/api.php?action=query&meta=tokens&format=json&type=login

...我得到了一个非常合理的答案,例如:

{"batchcomplete":"","query":{"tokens":{"logintoken":"37ec2e690eeb48a10ac66b2ccbca2b576000f9f4+\\"}}}

如果我发送...

/wikiB/api.php?action=query&meta=tokens&format=json&type=login

...我得到以下答案,例如:

{"error":{"code":"readapidenied","info":"You need read permission to use this module.","*":"See http://xxx.xxx.xxx.xxx/wikiB/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes."}}

这可以使用任何网络浏览器进行复制。

wikiB问:我什至无法访问正常的登录模块,这可能是什么原因?不可能是配置。它几乎完全相同。不可能是源代码。我对 PHP 文件进行了比较,发现没有显着差异。这里有什么问题?似乎它必须与数据库有关。但是我该如何处理呢?有人有想法吗?如果您能提供帮助,我将不胜感激!

标签: apiauthenticationmediawikimediawiki-api

解决方案


我分析了数据库:没有区别。我用谷歌做了更多的研究:发现了一个错误报告。

这是 MediaWiki 中的一个错误。他们提供了一个带有这种错误的官方软件版本。

原来有1.34.0版本和1.34.1版本。我的 WikiA 有 1.34.1,而 WikiB 有 1.34.0。将这个单个文件includes/api/ApiQuery.php从 WikiA 复制到 WikiB 后,一切正常。

https://gerrit.wikimedia.org/r/c/mediawiki/core/+/580097/


推荐阅读