我正在尝试设置一个私有(private) 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可以让您从扩展中执行此操作的位置,因此看起来您将不得不求助于修补代码。这看起来确实是 Hook 的自然位置,因此 file a feature request 可能不是个坏主意。要求添加这样的钩子(Hook)。
(或者,您确实可以在适当的位置输出登录表单,但这可能比仅仅重定向到 Special:UserLogin 更难实现。乍一看,我找不到任何方便的“outputLoginForm()”方法调用 Special:UserLogin code ,虽然实际上自己生成匹配的登录表单并不难,但这意味着以后对表单的任何更改都可能破坏兼容性。)