5

我正在尝试创建一个身份验证插件,但是当用户在 moodle 数据库中不存在时我遇到了问题。因此,我试图找到一种手动创建用户的方法。

我试过了:

$user            = new StdClass();
$user->username  = $ucUser;
$user->auth      = 'ucauth';
$user->firstname = "First";
$user->lastname  = "Last";
$user->id        = $DB->insert_record('user', $user);

但它没有用......我遇到了插入错误。我在$user对象中还需要什么?

4

3 回答 3

8

用户对象应具有以下值:

$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);

请试试这个。

于 2012-06-07T12:25:59.357 回答
2

好吧,我建议你使用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);

我不知道你到底想达到什么目的。但是我制作了一个插件来连接外部网络服务,我花了一段时间才弄清楚如何正确地做到这一点。我可以为您提供任何您需要的帮助。

于 2012-06-11T15:42:46.787 回答
1

手动创建用户时需要设置一些值。我面临同样的情况并最终得到了这个解决方案:

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);
于 2018-05-04T10:35:18.337 回答