Единый вход в Drupal 7 (с Moodle, вики и т. д.)

Все мои пользователи хранятся в моей пользовательской таблице drupal 7.

У меня также есть несколько внешних сайтов, таких как Wiki и Moodle.

Я использовал единый вход с Drupal-6 и Moodle. Moodle поддерживает пользователей из других систем.

Пароли не совпадают, когда я хэширую пароль в Moodle с помощью функции Drupal 7 user_hash_password. Каждый раз новый хэш.

Есть ли что-то еще, что мне нужно сделать с паролем в пользовательской таблице Drupal 7?


person jussi    schedule 14.03.2012    source источник


Ответы (2)


Создайте модуль Drupal 7 с хуком меню. Хук меню должен принимать имя пользователя и пароль как переменные $_POST, а затем следовать пути аутентификации user_login().

Итак, по сути, вы получите:

function my_module_authentication_menu_hook() {
  // Note anywhere below that I put return FALSE you should return a failed auth response.
  // Where there is a return TRUE you should return a successful auth response.
  // The formatting of the auth response is up to you with how your Moodle call will react.
  if (!isset($_POST['username']) || !isset($_POST['password'])) {
    return FALSE;
  }

  $username = $_POST['username'];
  $password = $_POST['password'];

  // Functionality from user_login_name_validate().
  if (user_is_blocked($username)) {
    return FALSE;
  }

  // Functionality from user_login_authenticate_validate().
  // You should add flood handling in here as well, but it can not be IP based, unless you
  // supply the IP of the user through your Moodle functionality.
  if (user_authenticate($username, $password) === FALSE) {
    return FALSE;
  }

  // See user_login_final_validate() and implement failed login functionality before success.
  return TRUE;
}

Другой вариант, который я не могу порекомендовать с чистой совестью, - это если вы не хотите маршрутизировать через Drupal и хотите напрямую запрашивать базу данных. Вам нужно будет воспроизвести код user_check_password() вместе с зависимым от него кодом _password_crypt(), _password_get_count_log2(), _password_base64_encode() и т. д. Вам также потребуется воспроизвести функциональность, чтобы определить, заблокирован ли пользователь или не прошел проверку подлинности. Вам также нужно будет убедиться, что пользователю разрешен вход в систему с воспроизведением функциональности user_login_default_validators(). Затем, если какой-либо из этих кодов обновится в ядре Drupal, вам нужно будет обновить его снова. Я действительно рекомендую маршрутизацию через Drupal из соображений обслуживания.

person Cody Craven    schedule 14.03.2012
comment
Обратите внимание, что это приведет к общему входу, который отличается от единого входа. Ваше сообщение было помечено как единый вход, но ваши вопросы касались общего входа. Если вы хотите реализовать настоящий единый вход, требуется гораздо больше, например общие файлы cookie, настройка времени ожидания сеанса и множество других сложностей, которые будут очень специфичны для вашей среды (сред). - person Cody Craven; 14.03.2012

Вы можете рассмотреть возможность использования модуля, такого как модуль CAS, для управления вводом пароля на одном сайте. Moodle и некоторые вики поддерживают этот IIRC. Используйте свою обычную стратегию, чтобы синхронизировать другие поля между продуктами.

person Dave    schedule 15.03.2012