我的Drupal站点通过共享用户名和密码数据启用外部服务的单点登录。如果用户是新用户,则使用用户名和密码在外部服务上创建新帐户。 问题是外部服务对用户名中的空格不满意。
我将以下代码写入Drupal模块,以便在创建帐户时从用户名中删除空格:
function mymodule_user_insert(&$edit, $account, $category){
if( $account->is_new ){
$name = str_replace(' ', '_', $account->name);
drupal_set_message("CHANGING {$account->name} TO {$name}");
$account->name = $name;
}
}
创建帐户后,我会看到默认的确认消息,如下所示:
为test_test1创建了一个新用户帐户。没有发送电子邮件。
确认我的字符串替换正在生效,但当我查看用户帐户时,它仍然包含空格。
我错过了什么或做错了什么?
答案 0 :(得分:0)
我使用了hook_user_presave()来使它工作。请参阅:user hooks。到那时,hook_user_insert()
被调用已经创建了用户。
我使用了hook_user_presave()
,因为在即将创建或更新用户帐户时会调用它。我使用$account->is_new
仅在新帐户上执行任务。然后我直接编辑了$edit
而不是$account
,因为user_save()将第二个参数(数组)保存在$account
中。
function mymodule_user_presave(&$edit, $account, $category) {
if( isset($account->is_new) && $account->is_new === TRUE ) {
$name = str_replace(' ', '_', $edit['name']);
// Also consider trimming the length and to lowercase your username.
drupal_set_message("CHANGING {$edit['name']} TO {$name}");
$edit['name'] = $name;
}
}