Moodle自动修改密码哈希及手动认证插件短期密码功能实现问询
我来分享下我在Moodle默认/手动认证插件中实现短期密码功能的具体做法,正好适配Moodle自动修改密码哈希的特性:
实现思路
因为Moodle会自动处理用户密码的哈希更新,所以我单独创建了一张表来存储短期密码的相关信息,避免和系统默认的密码表冲突。
数据库表设计
创建了名为local_stp的表(遵循Moodle本地插件的命名规范),字段包括:
id:自增主键user_id:关联Moodle用户表的用户IDpassword_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
相关产品推荐
相关产品推荐

