Друпал:настройка рабочего процесса регистрации пользователей для связи с другим веб-приложением

StackOverflow https://stackoverflow.com/questions/2119005

  •  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 );
 }
}

Замечание: В нашем случае регистрация требует одобрения администратора. В этом случае есть событие «обновления». Событие «Вставка» запускается, как только пользователь запрашивает учетную запись.

Информация для других новичков:

  • При попытке отладить код можно повторить CMD, чтобы получить содержание $ cmd, которое написано в верхней части слева от следующей страницы.
  • Если вы пишете PHP -код CRAPE и получаете пустую страницу при использовании крючка, вы можете добавить в Drupal/index.php следующие вызовы: error_reporting (e_all); ini_set ('display_errors', true); ini_set ('display_startup_errors', true); Это позволяет иметь информацию отладки.

  • Другие советы

    Сделав шаг назад и, глядя на общую картину, у вас есть несколько вариантов.

    1. Используйте OpenID (есть основной модуль Drupal для него) для обоих сайтов
    2. Используйте LDAP (для него действительно хороший модуль Drupal))
    3. Посмотрите на другие модули, предлагающие обмен входом в систему пользователя с другими приложениями (например, как http://drupal.org/project/phpbb или же http://drupal.org/project/moodle или много других) для вдохновения
    4. Пусть ваше веб -приложение использует пользовательский стол Drupal. Это относительно легко, так как имя пользователя существует в явном тексте, а пароль просто MD5'ed (так что нет солей или чего -то еще, чтобы поднять воды).

    По сути, «hook_user» неверен.Что вам нужно сделать, это использоватьook_form_alter, чтобы изменить параметр #validate формы входа.Таким образом, проверка передается вашей функции в вашем модуле, где вы получаете $form_values['username'] и $form_values['password'].Вы передаете это на свой URL через завиток.Если он возвращается правильно, ничего не возвращайте.Если он не возвращается, используйте form_set_error, и он запретит вход в систему.

    Удачи!

    Чтобы просто получить ответ со страницы, вы можете использовать drupal_http_request ()

    И общая примечание безопасности, убедитесь, что вы аутентифицируете и проверяете запросы между приложениями. Передача паролей в простом тексте с помощью параметров GET через HTTP также делает меня немного тошнотворным, но я не знаю, что ваше приложение настроено.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top