我尝试修复ConfirmAccount extension,但我的修复似乎不起作用。有什么建议吗?
详细信息:
“修剪旧请求不会经常触发,因此旧的拒绝请求可能会持续存在。” https://www.mediawiki.org/wiki/Extension:ConfirmAccount#Known_issues
此行为可防止被拒绝的电子邮件再次请求帐户。管理员拒绝帐户请求后,相同的用户名/电子邮件无法提交其他请求。第二次尝试时出错:
用户名已在待处理的帐户请求中使用。
我们想要启用重新请求。要修复,我想在每次拒绝后强制修剪,以清除请求缓存。
目前看来修剪发生在 \ extensions \ ConfirmAccount \ frontend \ specialpages \ actions \ ConfirmAccount_body.php
文件中# Every 30th view, prune old deleted items
if ( 0 == mt_rand( 0, 29 ) ) {
ConfirmAccount::runAutoMaintenance();
}
因此,函数runAutoMaintenance
似乎是修剪功能。 runAutoMaintenance
位于 \ ConfirmAccount \ backend \ ConfirmAccount.class.php
class ConfirmAccount {
/** * Move old stale requests to rejected list. Delete old rejected requests. */
public static function runAutoMaintenance() {
...
为了在每次拒绝操作后致电runAutoMaintenance
,我认为对runAutoMaintenance
的调用应放在功能rejectRequest
中,位于文件 \ extensions \ ConfirmAccount \ business中\ AccountConfirmSubmission.php
具体来说,我认为它可以直接进入:
# Clear cache for notice of how many account requests there are
ConfirmAccount::clearAccountRequestCountCache();
也许在接受,保持和垃圾邮件操作之后也应该进行修剪。不确定。目前,在Reject之后修剪应该处理原始问题。
我尝试了上述修复程序,但它似乎无法正常工作。我很茫然。
有人可以帮助确定此修复无效的原因吗?
原始代码:
protected function rejectRequest( IContextSource $context ) {
....
# Clear cache for notice of how many account requests there are
ConfirmAccount::clearAccountRequestCountCache();
....
新代码:
protected function rejectRequest( IContextSource $context ) {
....
# Clear cache for notice of how many account requests there are
ConfirmAccount::clearAccountRequestCountCache();
# Prune
ConfirmAccount::runAutoMaintenance();
....
在第二次请求时,仍然会收到“用户名已在待处理的帐户请求中使用。”
答案 0 :(得分:0)
看起来我解决了它。有两个步骤:
<强>详细信息:强>
在 LocalSettings.php 中,在需要声明之后,将Rejected-Age设置为0.这样可以确保在修剪操作中删除被拒绝的请求:
require_once "$IP/extensions/ConfirmAccount/ConfirmAccount.php";
$wgRejectedAccountMaxAge = 0;
将Prune代码添加到显示Request表单的函数中,在/ConfirmAccount/frontend/specialpages/actions/RequestAccount_body.php,function showForm。在函数中添加最后一个命令:
旧代码:
$out->addWikiMsg( 'requestaccount-footer' );
}
新代码:
$out->addWikiMsg( 'requestaccount-footer' );
# PRUNE
ConfirmAccount::runAutoMaintenance();
}