Ошибка MediaWiki: вызов неопределенного метода User :: saveToCache ()

Я недавно обновил установку MediaWiki до 1.30 и теперь работаю над ошибками плагина, которые появились в ходе обновления.

Моя самая непосредственная ошибка с RadiusAuthPlugin для Mediawiki. При попытке авторизации на странице отображается следующая ошибка, но авторизация прошла успешно:

[3d3906e176c5476982ff8037] /MEDIAWIKI/index.php?title=Spezial:Login&returnto = Ошибка главной страницы от
строка 75 из
/usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/extensions/RadiusAuthPlugin/RadiusAuthPlugin.php:
Вызов неопределенного метода User :: saveToCache ()

Backtrace:

# 0 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/auth/AuthPluginPrimaryAuthenticationProvider.php(145):
RadiusAuthPlugin-> updateUser (Пользователь)

# 1 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/Hooks.php(177):
Обсуждение MediaWiki \ Auth \ AuthPluginPrimaryAuthenticationProvider-> onUserLoggedIn (Пользователь)

# 2 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/Hooks.php(205):
Hooks :: callHook (строка, массив, массив, NULL)

# 3 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/auth/AuthManager.php(2388):
Hooks :: run (строка, массив)

# 4 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/auth/AuthManager.php(690): MediaWiki \ Auth \ AuthManager-> setSessionDataForUser (пользователь, логическое значение)

# 5 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/auth/AuthManager.php(382): MediaWiki \ Auth \ AuthManager-> continueAuthentication (массив)

# 6 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/AuthManagerSpecialPage.php(353):
MediaWiki \ Auth \ AuthManager-> beginAuthentication (массив, строка)

# 7 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/AuthManagerSpecialPage.php(482):
AuthManagerSpecialPage-> executeAuthenticationStep (строка, массив)

# 8 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/htmlform/HTMLForm.php(669):
AuthManagerSpecialPage-> handleFormSubmit (array, VFormHTMLForm)

# 9 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/AuthManagerSpecialPage.php(416):
HTMLForm-> trySubmit ()

# 10 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/LoginSignupSpecialPage.php(316):
AuthManagerSpecialPage-> trySubmit ()

# 11 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/SpecialPage.php(522):
LoginSignupSpecialPage-> выполнить (NULL)

# 12 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/SpecialPageFactory.php(578):
SpecialPage-> Run (NULL)

# 13 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/MediaWiki.php(287):
SpecialPageFactory :: executePath (Title, RequestContext)

# 14 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/MediaWiki.php(851):
MediaWiki-> performRequest ()

# 15 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/MediaWiki.php(523):
MediaWiki-> Основной ()

# 16 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/index.php(43):
MediaWiki-> Run ()

# 17 {main}

(Я цензурировал идентифицирующие части пути по соображениям безопасности)

RadiusAuthPlugin.php:

<?php
require_once("$IP/includes/AuthPlugin.php");
require_once("radius.class.php");
require_once("$IP/includes/GlobalFunctions.php");

error_reporting(E_ALL);

class RadiusAuthPlugin extends AuthPlugin
{
function userExists($username)
{
return TRUE;
}

function authenticate($username, $password)
{
global $wgRadiusAuthPluginServers, $wgRadiusAuthPluginSecret;

$username = strtolower($username);
//$handle=fopen("/tmp/radius","w");
//fwrite($handle,"$username;$password;\n");

foreach($wgRadiusAuthPluginServers as $server)
{
$radius = new Radius($server, $wgRadiusAuthPluginSecret);
//$radius->SetNasIpAddress('NAS_IP_ADDRESS'); // Needed for some devi$
//fwrite($handle,"Radius Objekt angelegt\n");
if ($radius->AccessRequest($username, $password))
{
return TRUE;
//fwrite($handle,"Auth successful\n");
}
//else{
//    fwrite($handle,"Auth not successful\n");
//  }

}
//fclose($handle);
return FALSE;
}

function modifyUITemplate(&$template, &$type)
{
global $wgRadiusAuthPluginExtrafields;
$template->set('usedomain', FALSE);
$template->set('useemail', FALSE);
$template->set('create', FALSE);
//$template->set('create', TRUE);
$template->set('canremember', FALSE);
$template->set('extrafields', $wgRadiusAuthPluginExtrafields);
}

function autoCreate()
{
global $wgRadiusAuthPluginAutoCreate;
if(isset($wgRadiusAuthPluginAutoCreate))
{
if(is_bool($wgRadiusAuthPluginAutoCreate))
{
return $wgRadiusAuthPluginAutoCreate;
}
}
return FALSE;
}

function validDomain($domain)
{
return TRUE;
}

function updateUser(&$user)
{
global $wgRadiusAuthPluginMaildomain;
$user->setEmail($user->getName()."@".$wgRadiusAuthPluginMaildomain);
$user->saveToCache();
return TRUE;
}

function allowPasswordChange()
{
//return false;
return TRUE; // since Ubuntu 14.04
}

function allowPropChange($prop = '')
{
return FALSE;
}

function allowSetLocalPassword()
{
return true;
}

function setPassword($user, $password)
{
return true;
}

function updateExternalDB($user)
{
return true;
}

function canCreateAccounts()
{
#       return FALSE;
return TRUE;
}

function adduser($user, $password, $email = '', $realname = '')
{
return false;
#        return true;
}

function strict()
{
global $wgRadiusAuthPluginStrict;
if(isset($wgRadiusAuthPluginStrict))
{
if(is_bool($wgRadiusAuthPluginStrict))
{
return $wgRadiusAuthPluginStrict;
}
}
return TRUE;
}

function strictUserAuth($user)
{
global $wgRadiusAuthPluginStrictUserAuth;
if(isset($wgRadiusAuthPluginStrictUserAuth))
{
if(is_bool($wgRadiusAuthPluginStrictUserAuth))
{
return $wgRadiusAuthPluginStrictUserAuth;
}
}
}
return TRUE;
}

function initUser(&$user, $autocreate = false)
{
global $wgRadiusAuthPluginMaildomain, $wgSitename, $wgRadiusAuthPluginM$
$user->setEmail($user->getName()."@".$wgRadiusAuthPluginMaildomain);
$user->setEmailAuthenticationTimestamp(wfTimestamp(TS_MW));
$user->sendMail("[".$wgSitename."] ".$wgRadiusAuthPluginMailSubject,$wg$
$user->removeGroup("User");
//$user->removeGroup("auto-registered User");
//$user->addGroup("USER");
}
}

$wgExtensionCredits['other'][] = array(
'name' => 'RadiusAuthPlugin',
'version' => '1.1.0',
'author' => 'James Young',
'author' => 'edited by Andreas Ihrig',
'description' => 'Automatic login with a RADIUS server; now with Setting-Op$
);

?>

Я понятия не имею, что с этим делать, и я благодарен за любую помощь.

Пока спасибо

2

Решение

User::saveToCache был удален два года назад. (До этого его документация гласила: «Этот метод не должен вызываться вне класса User». Эти предупреждения существуют по определенной причине.) Почему кто-то сохраняет изменения в кэш, но не на диск в любом случае? Честно говоря, автор этого плагина, похоже, не имеет большого представления о том, что они делают.

Вы можете попробовать заменить saveToCache с saveSettings, Хотя в идеале следует сначала проверить правильность адреса электронной почты, чтобы избежать бессмысленной записи в БД. И, вероятно, позвоните confirmEmail тоже, поскольку адрес электронной почты исходит из авторитетного источника.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]