Единый вход в Drupal 7 (с Moodle, вики и т. Д.) - PullRequest
0 голосов
/ 14 марта 2012

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

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

0 голосов
/ 14 марта 2012

Создайте модуль 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 по причинам обслуживания.

...