Я пытаюсь настроить частный экземпляр Mediawiki, который ожидает, что пользователи войдут в систему, чтобы увидеть какой-либо контент. Я попытался настроить переменную $ wgWhitelistRead в файле Localsettings.php, но она все равно выводит меня на страницу с надписью «Login Required». Я хочу, чтобы вики перенаправляли на 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 ()» для вызова специальный: код UserLogin , и в то время как на самом деле сложно создать соответствующую форму входа самостоятельно, это означает, что любые последующие изменения формы могут нарушить совместимость.)
В качестве особо ужасного взлома вы можете поместить форму входа в сообщение, отображаемое при необходимости входа (это должно быть сообщение loginreqpagetext
). Это было бы нетривиально из-за защиты от CSRF, но вы можете обойти это через AJAX. (Есть, безусловно, гораздо лучшие решения, это просто быстрый и грязный способ сделать это.)