6

我正在寻找一种方法来防止所有用户在 Mediawiki 中更改他们的密码(因为帐户创建和密码更改由中央 SSO 服务器处理)。

据我所知,Mediawiki 用户有两种更改密码的方法:使用登录页面中的“忘记密码链接”(最好的解决方案是在此处显示自定义链接)和更改密码的能力用户首选项中的密码。

我还没有找到合适的方法,因为这似乎无法通过 LocalSettings.php 中的简单配置来实现。

很感谢任何形式的帮助。

4

4 回答 4

7

经过一些黑客攻击后,这是完整的解决方案。我没有在任何地方找到它,所以如果它对您有用,请给它一个大拇指:

通过将以下更改放入 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:

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

在密码更改页面上不允许更改密码(由用户首选项中的链接引用):

$wgHooks['PrefsPasswordAudit'][] = 'ChangePasswordIsAllowed';
function ChangePasswordIsAllowed ( $user ) {
    throw new PasswordError( wfMsg( 'resetpass_forbidden' ));
    return true;
}

在用户首选项中隐藏密码更改链接:

$wgHooks['GetPreferences'][] = 'RemovePasswordChangeLink';
function RemovePasswordChangeLink ( $user, &$preferences ) {
    unset($preferences['password']);
    return true;
}
于 2013-06-03T09:56:59.313 回答
5

如果您使用的是当前版本的 MediaWiki(在此发布时为 1.32,但这可以追溯到 1.18),Carsten Schmitz 接受的答案中的大多数钩子现在已被弃用甚至已被删除,所以我会使用当前可用的钩子(与 一起使用)发布类似的解决方案AuthManager

像往常一样,将以下行添加到LocalSettings.php

这将删除登录页面上的密码重置链接和登录帮助。如果您想添加另一个链接,只需替换false为有效的 HTML 链接,例如<a href="https://urltopasswordchangesite">I forgot my password</a>

$wgHooks['AuthChangeFormFields'][] = function ( $requests, $fieldInfo, &$formDescriptor, $action ) {
    if ($action === "login") {
        // Removes the "Help for logging in" link
        $formDescriptor["linkcontainer"]["default"] = false;
        // Removes the actual password reset link
        $formDescriptor["passwordReset"]["default"] = false;
    }
    return true;
};

此钩子将删除用户首选项面板中的密码重置按钮:

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

最后,禁用密码和凭据更改的最简单方法是禁用相应的特殊页面:

$wgHooks['SpecialPage_initList'][] = function ( &$list ) {
    unset( $list['ChangeCredentials'] );
    unset( $list['PasswordReset'] );
    return true;
};
于 2019-04-06T22:28:04.610 回答
0

似乎有一个扩展:http ://www.mediawiki.org/wiki/Extension:RestrictPasswordChange

于 2014-03-09T09:18:27.137 回答
-1

我只是这样做了,足以隐藏链接(mediawiki 1.20.3):

AuthPlugin.php第 176 行:

从改变

public function allowPasswordChange() {
    return true;
}

public function allowPasswordChange() {
    return false;
}
于 2014-04-09T19:24:59.560 回答