我正在尝试创建一个身份验证插件,但是当用户在 moodle 数据库中不存在时,我遇到了问题。因此,我正在尝试找到一种手动创建用户的方法。
我试过了:
$user = new StdClass();
$user->username = $ucUser;
$user->auth = 'ucauth';
$user->firstname = "First";
$user->lastname = "Last";
$user->id = $DB->insert_record('user', $user);
但是它没有用...我收到插入错误。$user
对象中还需要什么?
用户对象应具有以下值:
$user = new StdClass();
$user->auth = 'manual';
$user->confirmed = 1;
$user->mnethostid = 1;
$user->email = "email";
$user->username = "username";
$user->password = md5('password');
$user->lastname = "lastname";
$user->firstname = "firstname";
$user->id = $DB->insert_record('user', $user);
请尝试此。
好吧,我建议您使用authenticate_user_login($username, null)
因为这将为您提供一个空用户,您可以在稍后的流程中完成。然后你可以使用complete_user_login($user);
如果你想将用户发送到编辑页面,比如
if (user_not_fully_set_up($USER)) {
$urltogo = $CFG->wwwroot.'/user/edit.php';
}else{
$urltogo = $CFG->wwwroot.'/';
}
redirect($urltogo);
我不知道你到底想实现什么。但是我已经制作了一个插件来连接外部 Web 服务,我花了一段时间才弄清楚如何正确执行此操作。我可以帮你解决你需要的任何事情。
手动创建用户时需要设置一些值。我面临着同样的情况,最终得到了这个解决方案:
global $DB;
$user = new StdClass();
$user->email = strtolower('someemail'); //MOODLE requires lowercase
$user->username = strtolower('someusername');//MOODLE requires lowercase
$user->password = hash_internal_user_password('somepassword');
$user->lastname = 'somelastname';
$user->firstname = 'somename';
// These values are required.
// Default values are stored in moodle config files but... this is easier.
$user->auth = 'manual';
$user->confirmed = 1;
$user->mnethostid = 1;
$user->country = 'ES'; //Or another country
$user->lang = 'es'; //Or another country
$user->timecreated = time();
$user->maildisplay= 0;
$user->id = $DB->insert_record('user', $user); // returns new userid
如果您愿意,可以检索整个用户的数据:
$lastid = $DB->insert_record('user', $user);
$user2 = get_complete_user_data('id', $lastid);
首先,在代码片段的顶部包含 moodle 用户 lib 文件。
require_once($CFG->dirroot.'/user/lib.php');
然后在变量$user中创建一个用户详细信息的对象。例
$user = new stdClass();
$user->firstname = "test";
$user->lastname = "test";
$user->email = "test@xxx.com";
$user->address = "abcd";
以及您要保存的所有其他字段。然后调用下面的代码。它将返回用户创建的 ID。之后,您可以使用该 id 提取用户详细信息或其他内容。
$user->id = user_create_user($user, false, false);