在创建时以编程方式更改Drupal用户名

时间:2016-04-18 19:14:35

标签: drupal-7 str-replace username

我的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创建了一个新用户帐户。没有发送电子邮件。

确认我的字符串替换正在生效,但当我查看用户帐户时,它仍然包含空格。

我错过了什么或做错了什么?

1 个答案:

答案 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;
  }
}

enter image description here