如何更改Mediawiki 1.19.1的登录页面以直接转到Special:UserLogin

时间:2012-06-20 16:02:57

标签: php customization mediawiki

我正在尝试设置一个私有的Mediawiki实例,该实例希望用户登录以查看任何内容。我尝试在Localsettings.php文件中调整$ wgWhitelistRead变量,但它仍然会将我带到一个页面,上面写着“需要登录”。如果用户没有登录,我希望wiki重定向到Special:userLogin。我该怎么办?

我找到了similar question on the mwforums但似乎是旧版本的mediawiki。有任何想法吗?

2 个答案:

答案 0 :(得分:12)

看似自然的地方就是OutputPage::showPermissionsErrorPage()。具体来说,实际的错误消息显示在以下两行中:

$this->prepareErrorPage( $this->msg( 'loginreqtitle' ) );
$this->addHTML( $this->msg( $msg )->rawParams( $loginLink )->parse() );

要直接重定向到Special:UserLogin,您可以用类似的(未经测试的!)代码替换它们:

$this->redirect( SpecialPage::getTitleFor( 'Userlogin' )->getFullURL( $query ) );

唉,似乎没有任何方便的hook允许你从扩展程序中执行此操作,所以看起来你不得不求助于修补代码。这看起来像一个钩子的自然位置,所以file a feature request要求添加这样的钩子可能不是一个坏主意。

(或者,您确实可以输出一个登录表单,但实现起来可能比仅重定向到Special:UserLogin有点棘手。乍一看,我找不到任何方便的“outputLoginForm()”方法要调用Special:UserLogin code,虽然自己生成匹配的登录表单实际上并不困难,但这意味着以后对表单的任何更改都可能会破坏兼容性。)

答案 1 :(得分:1)

作为一个特别可怕的黑客,您可以将登录表单放入需要登录时显示的消息(应该是loginreqpagetext消息)。由于反CSRF保护,这将是非平凡的,但您可以通过AJAX解决这个问题。 (肯定有更好的解决方案;这只是快速而肮脏的方式。)