我们最近将 MediaWiki 从 1.13.2 升级到了 1.15.4。其中一个副作用是人们的签名会被自动删除。也就是说,在“我的偏好”下添加的签名会在几分钟后更改为与真实姓名字段相匹配。
我们设置$wgCleanSignatures = false在 LocalSettings.php 中但这不会改变行为。
有人知道如何预防这种情况吗?
更新:添加更多细节可能会有所帮助。
在我的偏好中我写道:
[[User:MyName|<span style="color:lightseagreen">My Name</span>]] ([[User talk:MyName|<span style="color:lightseagreen">Talk</span>]])
因此,我在讨论页面上的签名是:
--[[User:MyName|<span style="color:lightseagreen">My Name</span>]] ([[User talk:MyName|<span style="color:lightseagreen">Talk</span>]]) <time date stamp>
一小时后,偏好设置将恢复为:
My Name
我的签名变成:
--My Name <time date stamp>
答案1
这应该是使用外部身份验证的问题。当用户登录时,它会更新他们的属性,我猜在升级过程中它也会更新用户签名,请根据需要修改您的代码。
您可以从下面看到它是如何更新的。
还请检查此处,如果您使用自动登录,则有一些聊天记录,看起来签名已使用用户名更新,您需要修改代码。
http://www.mediawiki.org/wiki/Extension_talk:LDAP_Authentication/Archive_2#Signature_with_Real_Name
在 LdapAuthentication.php 中
/**
* When a user logs in, update user with information from LDAP.
*
* @param User $user
* @access public
* TODO: fix the setExternalID stuff
*/
function updateUser( &$user ) {
global $wgLDAPRetrievePrefs;
global $wgLDAPUseLDAPGroups;
global $wgLDAPUniqueBlockLogin, $wgLDAPUniqueRenameUser;
$this->printDebug( "Entering updateUser", NONSENSITIVE );
if ($this->authFailed) {
$this->printDebug( "User didn't successfully authenticate, exiting.", NONSENSITIVE );
return;
}
$saveSettings = false;
//If we aren't pulling preferences, we don't want to accidentally
//overwrite anything.
if ( isset( $wgLDAPRetrievePrefs[$_SESSION['wsDomain']] ) && $wgLDAPRetrievePrefs[$_SESSION['wsDomain']] ) {
$this->printDebug( "Setting user preferences.", NONSENSITIVE );
if ( '' != $this->lang ) {
$user->setOption( 'language', $this->lang );
}
if ( '' != $this->nickname ) {
$user->setOption( 'nickname', $this->nickname );
}
if ( '' != $this->realname ) {
$user->setRealName( $this->realname );
}
if ( '' != $this->email ) {
$user->setEmail( $this->email );
}
if ( ( isset( $wgLDAPUniqueBlockLogin[$_SESSION['wsDomain']] ) && $wgLDAPUniqueBlockLogin[$_SESSION['wsDomain']] )
|| ( isset( $wgLDAPUniqueRenameUser[$_SESSION['wsDomain']] ) && $wgLDAPUniqueRenameUser[$_SESSION['wsDomain']] ) ) {
if ( '' != $this->externalid ) {
$user->setExternalID( $this->externalid );
}
}
$saveSettings = true;
}
if ( isset( $wgLDAPUseLDAPGroups[$_SESSION['wsDomain']] ) && $wgLDAPUseLDAPGroups[$_SESSION['wsDomain']] ) {
$this->printDebug( "Setting user groups.", NONSENSITIVE );
$this->setGroups( $user );
$saveSettings = true;
}
if ( $saveSettings ) {
$this->printDebug( "Saving user settings.", NONSENSITIVE );
$user->saveSettings();
}
}