Плагин аутентификации Moodle. Что мне не хватает?

Я пытаюсь вручную аутентифицировать пользователя в moodle с помощью плагинов аутентификации, но я не понимаю всего, что необходимо для работы всего процесса. Итак, некоторые предложения о том, что мне здесь не хватает, были бы очень полезны!

Я создал плагин, включил его, и он работал, но только в НЕКОТОРЫХ случаях, и в этом моя проблема. Я предполагаю, что в какой-то момент мне действительно нужно вызвать функцию, которая сохраняет информацию о пользователе в базе данных Moodle. Но опять же, я не уверен, где он находится и как он работает. Итак... эксперты, помогите мне.

Вот две функции, которые я изменил в своем плагине аутентификации. (авторизация.php)

function loginpage_hook() {
    global $CFG, $DB, $user, $frm, $errormsg;
    $IsAuthenticated = false;
    if(isset($_COOKIE["AUTHENTICATION_KEY"])){
        $json = file_get_contents("WWW.WEBSERVICEURL.COM",true); 
        //getting the file content
        $decode = json_decode($json, true);
        //getting the file content as array  
        if($decode["AuthFlag"]){
            $ucUser = $decode["Username"];
            $user = $DB->get_record('user', array('username'=>$ucUser, 'mnethostid'=>$CFG->mnet_localhost_id));
            $frm->username = $ucUser;
            $IsAuthenticated = true;
        }
    }
    if(!$IsAuthenticated && empty($frm->username)){
        $errormsg = ".";
    }
}

/**
 * Returns true if the username and password work or don't exist and false
 * if the user exists and the password is wrong.
 *
 * @param string $username The username
 * @param string $password The password
 * @return bool Authentication success or failure.
 */
function user_login ($username, $password) {
    global $CFG, $DB, $user;
    if(!$user){ return false; }

    if(isset($_COOKIE["AUTHENTICATION_KEY"])){
        $json = file_get_contents("WWW.WEBSERVICEURL.COM", true); 
        //getting the file content
        $decode = json_decode($json, true);
        //getting the file content as array  
        if($decode["AuthFlag"]){
            $ucUser = $decode["Username"];
            if($user->username = $ucUser){ return true; }
        }
    }

    return false;
}

person Naner    schedule 06.06.2012    source источник
comment
Я не могу понять, где именно ваша проблема и чего вы пытаетесь достичь. Не могли бы вы быть немного более конкретным?   -  person limoragni    schedule 11.06.2012
comment
Моя проблема заключалась в том, что когда я пытался вручную аутентифицировать пользователя (через веб-сервис), это не сработало для пользователей, которых не было в базе данных Moodle (если это имеет смысл). Итак, что я искал, так это создать пользователя в базе данных Moodle, чтобы моя ручная аутентификация могла работать. Что-то подобное. Но на самом деле я нашел обходной путь: плагин LDAP, который уже используется, создает этого пользователя Moodle, поэтому... при попытке использовать мой плагин, если пользователь не существует, я говорю Moodle использовать LDAP, и в следующий раз , так как пользователь теперь создан, мой плагин работает. Спасибо за помощь!   -  person Naner    schedule 26.06.2012


Ответы (1)


Я недавно сделал плагин авторизации. Я думаю, что ключевой фрагмент кода, который вам не хватает, будет примерно таким:

$user = authenticate_user_login($username, null);

        $newuser = new stdClass();
        $newuser->id = $user->id;
        $newuser->email = $mail;
        $newuser->username = $mail;
        $newuser->country = 'AR';
        $newuser->city = 'capital federal';
        $newuser->firstname = $nombre;
                    $newuser->lastname =  $apellido;

        $DB->update_record('user', $newuser);

        $user = authenticate_user_login($mail, null);
        complete_user_login($user);

Ключевая функция там authenticate_user_login($username, null). Вы можете передать любое имя пользователя, если имя пользователя не существует, оно создает пустого пользователя, готового к заполнению.

У меня плагин работает нормально. Так что, если вам что-то нужно или вы хотите поделиться своим кодом, чтобы я мог понять, в чем проблема, добро пожаловать!

person limoragni    schedule 27.06.2012
comment
возможно ли сделать что-то, что позволит учащимся из любой школы, использующей мудле, входить в систему, используя свой мудл? Например, у меня есть приложение для аренды книг в колледже, и я хотел бы войти в систему с помощью кнопки Moodle. Возможно? - person ChuckKelly; 09.07.2015
comment
Я думаю, что это возможно, но я не знаю, есть ли что-то вроде плагина для этого. Поскольку Moodle имеет открытый исходный код, вы можете добавить в Moodle службу для выполнения этой аутентификации. Но это не так просто! - person limoragni; 09.07.2015