加入Drupal注册并根据业务逻辑验证用户信息

时间:2010-02-15 06:14:45

标签: drupal-6 hook registration

我想挂钩注册模块。我已经拥有一个使用我的旧网站的50000个用户的数据库。现在我正在迁移到Drupal。

我仍然没有将条目迁移到drupal数据库。我将检查我的旧数据库。

当用户尝试在Drupal中注册时,我需要检查他提供的用户名是否已经存在于50000(和不断增长的)条目列表中。如果它存在,我需要取消注册,显示错误消息,说明用户名存在..

我应该使用哪个钩子?如果我的代码认为验证失败,我怎么能告诉drupal显示错误信息?

编辑:我挂钩了hook_user并检查了'validate'op。我能够验证并分配错误消息。但它适用于所有形式。我想仅验证新帐户创建表单。我怎么能这样做?

感谢。

4 个答案:

答案 0 :(得分:18)

您应该使用hook_form_FORM_ID_alter()为注册表单注册一个额外的验证回调函数,有点像这样:

// Alter the registration form
function yourModuleName_form_user_register_alter(&$form, &$form_state) {
  // Add your own function to the array of validation callbacks
  $form['#validate'][] = 'yourModuleName_user_register_validate';
}

// Perform your own validation
function yourModuleName_user_register_validate($form, &$form_state) {
  // Extract the submitted name
  $name = $form_state['values']['name'];
  // Check it according to your own logic
  $is_valid_name = your_check_for_valid_name();
  // File error, when not valid
  if (!$is_valid) {
    form_set_error('name', t('Name already taken, please choose a different one'));
  }
}

答案 1 :(得分:6)

Henrik Opel回答关于Drupal 6的工作。对于Drupal 7,使用yourModuleName_form_user_register_form_alter

答案 2 :(得分:1)

以下是Drupal 7的一些示例:

/**
 * Implements of hook_user_insert().
 */
function foo_user_insert(&$edit, $account, $category) {
  // foo_user_submit($edit, $account);
}

/**
 * Implementation of hook_user_delete().
 */
function foo_user_delete($account) {
  // foo_user_delete($account);
}

/**
 * Implements hook_form_FORM_ID_alter().
 * Form ID: user_register_form
 */
function foo_form_user_register_form_alter($form, &$form_state) {
  if ($form['#user_category'] == 'account' && !isset($form['#user']->uid)) {
    // Foo code
  }
}

/**
 * Implements hook_form_FORM_ID_alter().
 * Form ID: user_profile_form
 */
function foo_form_user_profile_form_alter($form, &$form_state) {
  // Set a custom form validate and submit handlers.
  $form['#validate'][] = 'foo_account_validate';
  $form['#submit'][] = 'foo_account_submit';
}

/**
 * Implements of hook_form_alter().
 * This is the same as: hook_form_FORM_ID_alter()
 */
function foo_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) {
    case "user_profile_form":
    case "user_register_form":
      break;
  }
}

答案 3 :(得分:0)

考虑使用Username Originality AJAX检查模块:https://www.drupal.org/project/username_check