我正在尝试设置一个私有的Mediawiki实例,希望用户登录以查看任何内容.我尝试在Localsettings.PHP文件中调整$wgWhitelistRead变量,但它仍然会将我带到一个页面,上面写着“需要登录”.如果用户没有登录,我希望wiki重定向到Special:userLogin.我该怎么做?
我找到了一个similar question on the mwforums,但似乎是旧版本的mediawiki.有任何想法吗?
看似自然的地方是
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,虽然自己生成匹配的登录表单实际上并不困难,但这意味着以后对表单的任何更改都可能会破坏兼容性.)