Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mediawiki错误:调用未定义的方法User::saveToCache()_Php_Mediawiki_Radius_Mediawiki Extensions - Fatal编程技术网

Php Mediawiki错误:调用未定义的方法User::saveToCache()

Php Mediawiki错误:调用未定义的方法User::saveToCache(),php,mediawiki,radius,mediawiki-extensions,Php,Mediawiki,Radius,Mediawiki Extensions,我最近将mediawiki安装更新为1.30,现在正在处理更新过程中出现的插件错误 我最直接的错误是Mediawiki的RadiusAuthPlugin。尝试登录时,页面上显示以下错误,但登录成功: [3d3906e176c5476982ff8037] /MEDIAWIKI/index.php?title=Spezial:Login&returnto=Mainpage错误来自 第75行 /usr/srv/www/vhosts/HOSTNAME/htdocs ssl/MEDIAWIKI/exten

我最近将mediawiki安装更新为1.30,现在正在处理更新过程中出现的插件错误

我最直接的错误是Mediawiki的RadiusAuthPlugin。尝试登录时,页面上显示以下错误,但登录成功:

[3d3906e176c5476982ff8037] /MEDIAWIKI/index.php?title=Spezial:Login&returnto=Mainpage错误来自 第75行 /usr/srv/www/vhosts/HOSTNAME/htdocs ssl/MEDIAWIKI/extensions/RadiusAuthPlugin/RadiusAuthPlugin.php: 调用未定义的方法User::saveToCache()

回溯:

#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): AuthManager特殊页面->执行身份验证步骤(字符串、数组)

#8/usr/srv/www/vhosts/HOSTNAME/htdocs ssl/MEDIAWIKI/includes/htmlform/htmlform.php(669): AuthManagerSpecialPage->handleFormSubmit(数组,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->execute(空)

#12/usr/srv/www/vhosts/HOSTNAME/htdocs ssl/MEDIAWIKI/includes/specialpage/SpecialPageFactory.php(578): 特殊页面->运行(空)

#13/usr/srv/www/vhosts/HOSTNAME/htdocs ssl/MEDIAWIKI/includes/MEDIAWIKI.php(287): SpecialPageFactory::executePath(标题、请求上下文)

#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->main()

#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$
);

?>

已删除用户::saveToCache。(在此之前,它的文档说“不应在用户类之外调用此方法”。这些警告是有原因的。)为什么有人要保存对缓存的更改,而不是磁盘?坦率地说,该插件的作者似乎不太清楚他们在做什么

您可以尝试将
saveToCache
替换为
saveSettings
。虽然理想情况下,它应该首先检查电子邮件地址是否已经正确,以避免无意义的DB写入。而且可能也会呼叫
confirmEmail
,因为电子邮件地址来自权威来源