mediawiki - 使用 Bot 用户从 MediaWiki 中的受保护页面读取
问题描述
使用管理员用户,我创建了一个专用用户来拥有机器人;我将此机器人添加到“机器人”组。我使用这个用户登录并为我的应用程序创建了一个BotPassword,并授予它机器人可以拥有的所有可能权限。
我在我的LocalSettings.php
$wgGroupPermissions['*']['read'] = false;
$wgGroupPermissions['bot']['read'] = true;
从我的应用程序中,我可以使用登录 API成功登录- 获取令牌后:
在登录
{
"login": {
"result":"Success",
"lguserid":11,
"lgusername":"botuser@example.org"
}
}
但是,使用以下参数来查询页面:
ArrayList<BasicNameValuePair> queryParameters = new ArrayList<>();
queryParameters.add(new BasicNameValuePair("action", "query"));
queryParameters.add(new BasicNameValuePair("prop", "revisions"));
queryParameters.add(new BasicNameValuePair("rvprop", "content"));
queryParameters.add(new BasicNameValuePair("format", "json"));
queryParameters.add(new BasicNameValuePair("formatversion", "2"));
queryParameters.add(new BasicNameValuePair("rvslots", "main"));
queryParameters.add(new BasicNameValuePair("titles", pageName));
我得到错误:
{
"error": {
"code":"readapidenied",
"info":"You need read permission to use this module.",
"docref":"See https://wiki.example.org/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."
}
}
如果我在 LocalSettings 中授予全局读取权限,
$wgGroupPermissions['*']['read'] = true;
然后我的机器人用户能够毫无错误地获取页面 -
如何授予此机器人权限,以便我可以查询页面内容而不会出现readapidenied错误,同时仍保持我的 Wiki 私有?不同组中的 BotPassword 帐户是主用户吗?如果是这样,我该如何更改机器人的组?
我正在运行MediaWiki: 1.32.0
,PHP: 7.2.16
我使用ImapAuthorization进行用户登录。
解决方案
您需要在 Special:BotPasswords 中设置机器人可以访问的权限。这个想法是您的机器人密码的存储安全性低于您的真实密码(可能包含在某些共享服务器上的某些机器人配置文件中),因此您需要限制它的用途。
推荐阅读
- vue.js - 指令 Dragula 更新挂钩中的错误:“TypeError:无法读取未定义的属性 'drake'”
- swift - 如何在 4 行之后在集合视图中插入图像?
- python - 我看不到任何使用的副本,但我收到消息“正在尝试在 DataFrame 中的切片副本上设置值”
- excel-formula - excel公式中的动态
- javascript - 引导模式 ID 在 vue.js 方法中用于显示和隐藏模式
- pyspark - PySpark:我认为我的 GroupBy 将函数应用于整个列而不是唯一的子组
- tfs - 防止 TFS 中的并行发布
- asp.net-mvc - 在 MVC 中提交后渲染部分视图
- node.js - NodeJS OpenID 身份提供者服务器上的身份验证
- javascript - 如何在浏览器 JavaScript 中将文件传输到计算机或从计算机传输?