我正在尝试设置一个私有 Mediawiki 实例,该实例希望用户登录以查看任何内容。我尝试调整 Localsettings.php 文件中的 $wgWhitelistRead 变量,但它仍然将我带到一个显示“需要登录”的页面。如果用户未登录,我希望 wiki 重定向到 Special:userLogin。我该怎么做?
我在 mwforums 上发现了一个类似的问题,但它似乎是针对旧版本的 mediawiki。有任何想法吗?
我正在尝试设置一个私有 Mediawiki 实例,该实例希望用户登录以查看任何内容。我尝试调整 Localsettings.php 文件中的 $wgWhitelistRead 变量,但它仍然将我带到一个显示“需要登录”的页面。如果用户未登录,我希望 wiki 重定向到 Special:userLogin。我该怎么做?
我在 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 ) );
唉,似乎没有任何方便的钩子可以让你从扩展中做到这一点,所以看起来你必须求助于修补代码。这看起来确实是挂钩的自然位置,因此提交功能请求要求添加这样的挂钩可能不是一个坏主意。
(或者,您确实可以在适当的位置输出登录表单,但这可能比仅重定向到 Special:UserLogin 更难实现。乍一看,我找不到任何方便的“outputLoginForm()”方法来调用Special:UserLogin 代码,虽然自己生成匹配的登录表单实际上并不难,但这意味着以后对表单的任何更改都可能破坏兼容性。)
作为一个特别可怕的黑客,您可以将登录表单放入需要登录时显示的消息中(应该是loginreqpagetext
消息)。由于反 CSRF 保护,这将是非常重要的,但您可以通过 AJAX 解决这个问题。(肯定有更好的解决方案;这只是一种快速而肮脏的方法。)