2009-11-02 1 views
2

Когда мой пользователь пытается зарегистрироваться, я хотел бы убедиться, что его информация действительна, проверяя внешний репозиторий (например, вызов веб-службы или поиск сервера каталогов).Проверка регистрационных данных с помощью внешнего репозитория идентичности в Drupal

Возможно ли это с любым существующим модулем? Если нет, то каков был бы лучший способ развить эту функциональность?

ответ

2

Я не в курсе существующего модуля, позволяющего добавлять пользовательские проверки, но это довольно легко осуществить это с помощью «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-сервер для аутентификации, есть LDAP module. Проверь это.

Для аутентификации с помощью другого веб-сервиса вам необходимо написать модуль и реализовать hook_user, в частности, «логин». Если после входа в систему учетные данные пользователя не совпадают с полномочиями пользователя в вашем веб-сервисе, вы можете их вывести и отобразить сообщение.

+0

+1 для модуля LDAP и рекомендации 'hook_user', но я не согласен с частью проверки. Проверка должна произойти * перед * регистрацией/регистрацией, используя действие «validate». Таким образом, пользователь не будет входить в систему в первую очередь, поэтому нет необходимости выходить из системы снова - см. Мой пример в отдельном ответе. –

+0

Интересно ... Я никогда бы не нашел это из документа «проверки подлинности» на api.drupal.org. Похоже, что переписывать нужно немного лучше. Спасибо за исправление, хотя. – theunraveler

+0

@ theunraveler: во избежание недоразумений здесь, используя 'form_set_error()' во время действия 'validate', будет предотвращаться только вход в систему после * регистрации *, так как это подтверждается регистрационная форма (и форма редактирования учетной записи, не проверяйте это). Это не сработало бы, чтобы предотвратить * login * существующего пользователя, и в этом случае ваш подход будет вариантом (с альтернативой добавления пользовательского подтверждения возврата к форме входа). –