Moodle принимает логин с внешнего сайта

мы добавляем Moodle на наш сайт (другой сервер, другой поддомен, но тот же основной домен, и серверы настроены, чтобы иметь возможность общаться друг с другом), и то, что мы хотим, чтобы это сделать, это:

  • пользователь получает доступ к основному сайту
  • пользователь
  • пользователь щелкает ссылку на Moodle
  • Пользователь автоматически вошел в Moodle без необходимости повторного ввода своей информации
  • если пользователь закладки или прямой доступ Moodle, они все еще могут войти прямо там

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

1 ответов


поэтому я смог решить эту проблему и подумал, что поделюсь своим решением, если у кого-то еще будет подобная проблема в будущем.

поскольку наш сайт Moodle и основной сайт находятся в одном домене, то, что я сделал, было в сценарии входа для нашего основного сайта, я добавил следующий код:

$postData = array('username' => $username, 'password' => $password);
$post = http_post_fields('http://moodle.example.com/login/index.php', $postData);
$headers = http_parse_headers($post);
foreach($headers['Set-Cookie'] as $cookie)
{
    $details = http_parse_cookie($cookie);
    foreach ($details->cookies as $name => $value)
        setcookie($name, $value, $details->expires, $details->path, 'example.com');
}

в основном, я разместил учетные данные для входа в скрипт входа moodle с помощью http_post_fields, хотя cURL также должен работать, проанализировал заголовки, чтобы получить куки Moodle set, а затем установить эти куки себя, используя основной домен вместо более конкретного поддомена Moodle. Это может вызвать некоторые проблемы, если у пользователя есть существующий файл cookie из более конкретного поддомена, поэтому обязательно удалите любой существующий файл cookie с именем MoodleSession.