2013-06-03 70 views
4

我正在尋找一種方法來防止所有用戶在Mediawiki中更改密碼(因爲帳戶創建和密碼更改由中央SSO服務器處理)。防止用戶在Mediawiki中更改其密碼

據我所見,Mediawiki用戶有兩種方法來更改他們的密碼:使用登錄頁面中的「忘記密碼鏈接」(最好的解決方案是能夠顯示自定義鏈接)和能夠在用戶偏好中更改密碼。

我還沒有找到合適的方法,因爲這似乎不能通過LocalSettings.php中的簡單配置來實現。

任何幫助,非常感謝。

+0

您可能想分享你的經驗https://www.mediawiki.org/wiki/Requests_for_comment/AuthManager使得這樣的工作是在未來變得更加容易。 – Nemo

回答

5

這裏有一些黑客是完整的解決方案。我沒有找到它的任何地方這個完整的,所以請給它一個豎起大拇指,如果它是對你有用:

通過將以下更改到了LocalSettings.php

$wgHooks['UserLoginForm'][] = 'lfChangeLoginPage'; 
function lfChangeLoginPage(&$template) { 
    $template->set('canreset',false); // removes default reset password link 
    $template->set('resetlink',false); 
    // Use the following line to show your own 'reset password' link above the login fields 
    $template->set('link',"<a href='http://www.somedomain.org/lostpassword'>Forgot your password?</a>"); 
    return true; 
} 

禁用自定義登錄屏幕的輸出中重置密碼頁面,以防萬一有人知道直接的URL:

01:密碼更改頁面(通過鏈接用戶的喜好簡稱)上

// Disallow password reset on password reset page 
$wgHooks['UserLoginMailPassword'][] = 'MailPasswordIsAllowed'; 
function MailPasswordIsAllowed ($username, $error) { 
    $error = wfMsg('resetpass_forbidden'); 
    return false; 
} 

不允許更改密碼在用戶偏好

隱藏密碼更改鏈接:

$wgHooks['GetPreferences'][] = 'RemovePasswordChangeLink'; 
function RemovePasswordChangeLink ($user, &$preferences) { 
    unset($preferences['password']); 
    return true; 
} 
+0

爲我工作 - 因爲我們使用的是PluggableAuth + SimpleSAMLphp,所以我們需要爲用戶隱藏它。 – Taylor

-1

我只是做了這一點,這已經足夠了隱藏鏈接(鏈接到MediaWiki 1.20.3 ):

AuthPlugin.php線176:

變化
public function allowPasswordChange() { 
    return true; 
} 

public function allowPasswordChange() { 
    return false; 
} 
+1

不錯 - 這個解決方案的不足之處在於,更改總是需要在Mediawiki更新中重新完成。 – CarstenSchmitz

+0

不要破解核心! – Nemo