Друпал:настройка рабочего процесса регистрации пользователей для связи с другим веб-приложением
-
22-09-2019 - |
Вопрос
Я новичок в Drupal6 и долго безуспешно искал, как реализовать следующую функцию:Я использую Drupal в качестве внешнего интерфейса/документации для веб-приложения.Я хочу отразить создание, обновление и удаление всех учетных записей пользователей в этом веб-приложении, т.е.отправьте имя пользователя и пароль.
Я начал писать небольшой модуль, реализующий hook_user
(http://api.drupal.org/api/function/hook_user/6), но мне все еще интересно несколько вопросов, касающихся этого хука:
1) Я не могу найти документ, касающийся $account
поля и поэтому не знаю, как получить имя пользователя и пароль.
2) insert
операция сообщает, что «Учетная запись пользователя добавляется».Это срабатывает, когда пользователь запрашивает учетную запись или когда его/ее ожидающее создание учетной записи одобрено?
3) Управление пользователями в «ведомом» веб-приложении осуществляется через URL-интерфейс.Я знаю только header("Location: http://webapp/users/add?user=martin&pwd=bla")
PHP примитивен, но я боюсь, что это приведет к перенаправлению вместо того, чтобы просто перейти на целевую страницу и продолжить поток кода.Любое предложение?
Может быть, кто-то из вас уже запрограммировал такой модуль или у вас есть ссылки на дополнительную документацию?
Заранее спасибо,
Мартин
Решение 4
Вот последний фрагмент кода, который работает. Обратите внимание, что пароль получен MD5ifified, поэтому подчиненный веб -приложение должно быть в состоянии сделать это:
function mirror_registration_user($op, &$edit, &$account, $category = NULL) {
$cmd = 'http://www.example.com/register?name='.$account->name.'&pass='.$account->pass;
if($op == 'insert'){
$cmd .= '&op=insert';
drupal_http_request( $cmd );
}
else if($op == 'delete'){
$cmd .= '&op=delete';
drupal_http_request( $cmd );
}
else if($op == 'after_update'){ // 'update' is a "before update event"
$cmd .= '&op=update';
drupal_http_request( $cmd );
}
}
Замечание: В нашем случае регистрация требует одобрения администратора. В этом случае есть событие «обновления». Событие «Вставка» запускается, как только пользователь запрашивает учетную запись.
Информация для других новичков:
Другие советы
Сделав шаг назад и, глядя на общую картину, у вас есть несколько вариантов.
- Используйте OpenID (есть основной модуль Drupal для него) для обоих сайтов
- Используйте LDAP (для него действительно хороший модуль Drupal))
- Посмотрите на другие модули, предлагающие обмен входом в систему пользователя с другими приложениями (например, как http://drupal.org/project/phpbb или же http://drupal.org/project/moodle или много других) для вдохновения
- Пусть ваше веб -приложение использует пользовательский стол Drupal. Это относительно легко, так как имя пользователя существует в явном тексте, а пароль просто MD5'ed (так что нет солей или чего -то еще, чтобы поднять воды).
По сути, «hook_user» неверен.Что вам нужно сделать, это использоватьook_form_alter, чтобы изменить параметр #validate формы входа.Таким образом, проверка передается вашей функции в вашем модуле, где вы получаете $form_values['username'] и $form_values['password'].Вы передаете это на свой URL через завиток.Если он возвращается правильно, ничего не возвращайте.Если он не возвращается, используйте form_set_error, и он запретит вход в систему.
Удачи!
Чтобы просто получить ответ со страницы, вы можете использовать drupal_http_request ()
И общая примечание безопасности, убедитесь, что вы аутентифицируете и проверяете запросы между приложениями. Передача паролей в простом тексте с помощью параметров GET через HTTP также делает меня немного тошнотворным, но я не знаю, что ваше приложение настроено.