moodle有个外部数据库认证,但是由于ucenter使用了二次md5,所以不能直接使用,
一:修改 \moodle\auth\db\auth.php,大约90行左右,改为:
- $rs = $authdb->Execute("SELECT * FROM {$this->config->table}
- WHERE {$this->config->fielduser} = '".$this->ext_addslashes($extusername)."'
- AND {$this->config->fieldpass} = md5(concat('".$this->ext_addslashes($extpassword)."',`salt`)) ");
二:编码: 如果外部数据库的编码是gbk,或者是编码出错,需要在本行前加一行:
- $authdb->Execute("set names gbk");
三:禁用回写: 默认情况下,如果用户修改了信息,比如邮箱,Moodle会把该信息写回到外部数据库中,这项功能在某些情况下会很危险,甚至会破坏掉原数据库的用户信息。
/user/edit.php,第200行左右,禁用掉下面的部分:
- // pass a true $userold here
- if (! $authplugin->user_update($user, $usernew)) {
- // auth update failed, rollback for moodle
- $DB->update_record('user', $user);
- print_error('cannotupdateprofile');
- }
如果(1)外部编码是GBK;(2)确认要回写信息到外部数据库,那么必须在auth.php中的 520行左右
- $authdb = $this->db_init();
后面加一行:
- $authdb->Execute("set NAMES gbk");
-----待续---------
阅读(8740) | 评论(0) | 转发(0) |