You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moodle自动修改密码哈希及手动认证插件短期密码功能实现问询

我来分享下我在Moodle默认/手动认证插件中实现短期密码功能的具体做法,正好适配Moodle自动修改密码哈希的特性:

实现思路

因为Moodle会自动处理用户密码的哈希更新,所以我单独创建了一张表来存储短期密码的相关信息,避免和系统默认的密码表冲突。

数据库表设计

创建了名为local_stp的表(遵循Moodle本地插件的命名规范),字段包括:

  • id:自增主键
  • user_id:关联Moodle用户表的用户ID
  • password_hash:通过Moodle内置函数hash_internal_user_password生成的短期密码哈希
  • valid_from:短期密码生效的时间戳
  • valid_to:短期密码失效的时间戳
认证插件核心修改

在默认手动认证插件的user_login($username, $password)方法中,加入了短期密码的验证逻辑,代码片段如下:

// 验证短期密码
$stps = $DB->get_records('local_stp', ['user_id' => $user->id]);
foreach ($stps as $stp ) {
    $now = time();
    $validFrom = $stp->valid_from;
    $validTo = $stp->valid_to;

    // 检查当前时间是否在密码有效期内
    if ($now >= $validFrom && $now <= $validTo) {
        // 用Moodle内置函数验证输入密码与短期密码哈希是否匹配
        if (validate_internal_user_password($user, $password, $stp->password_hash)) {
            // 短期密码验证通过,允许登录
            return true;
        }
    }
}

// 若没有有效短期密码,执行原有默认密码验证逻辑
return parent::user_login($username, $password);
额外注意事项
  • 为了提升查询效率,建议给local_stp表的user_id和valid_to字段添加联合索引
  • 可以配置Moodle定时任务(Cron),定期清理过期的短期密码记录(即valid_to小于当前时间的条目)
  • 生成短期密码时,必须使用hash_internal_user_password函数生成哈希,确保和Moodle原生密码哈希规则一致
  • 要做好权限控制,只允许管理员或指定角色的用户创建短期密码,防止功能被滥用

内容的提问来源于stack exchange,提问作者Inceddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:18:13