Я не в курсе существующего модуля, позволяющего добавлять пользовательские проверки, но это довольно легко осуществить это с помощью «Validate» действие hook_user()
:
function yourModule_user($op, &$edit, &$account, $category = NULL) {
// Are we in the validation phase of a new user registration?
if ('validate' == $op && 'user_register' == $edit['form_id'] && 'account' == $category) {
// Yes, do custom validation...
// NOTE: Just an example to validate by email.
// Check the other elements in $edit array (e.g. 'name') for more options
$mail_is_valid = yourModule_custom_mail_validation($edit['mail']);
// Is the mail address OK?
if (!$mail_is_valid) {
// No, set error on mail form field
form_set_error('mail', t('your custom error message'));
}
}
}
Это остановит процесс регистрации и повторно отобразите регистрационную форму с сообщением об ошибке в поле почты, если yourModule_custom_mail_validation()
не возвращает TRUE.
Если вы хотите валидацию случиться для существующих пользователей редактирования своей учетной записи также можно опустить
&& 'user_register' == $edit['form_id']
часть из первого, если условие - код будет затем запустить для каждого пользователя представления редактирования формы, не только при регистрации.
+1 для модуля LDAP и рекомендации 'hook_user', но я не согласен с частью проверки. Проверка должна произойти * перед * регистрацией/регистрацией, используя действие «validate». Таким образом, пользователь не будет входить в систему в первую очередь, поэтому нет необходимости выходить из системы снова - см. Мой пример в отдельном ответе. –
Интересно ... Я никогда бы не нашел это из документа «проверки подлинности» на api.drupal.org. Похоже, что переписывать нужно немного лучше. Спасибо за исправление, хотя. – theunraveler
@ theunraveler: во избежание недоразумений здесь, используя 'form_set_error()' во время действия 'validate', будет предотвращаться только вход в систему после * регистрации *, так как это подтверждается регистрационная форма (и форма редактирования учетной записи, не проверяйте это). Это не сработало бы, чтобы предотвратить * login * существующего пользователя, и в этом случае ваш подход будет вариантом (с альтернативой добавления пользовательского подтверждения возврата к форме входа). –