Нуждаете се от помощ за отстраняване на грешки в персонализиран плъгин за удостоверяване за Moodle

Опитвам се да се удостоверя срещу потребителската база данни на моя уебсайт (базиран на CMS) и той използва малко по-различен подход при съхраняване на хеширани пароли. Той използва произволно генерирана сол за всеки потребител. Солта се съхранява в потребителската база данни заедно с хешираните пароли. Следователно директното картографирано удостоверяване на полето (както прави добавката за външна база данни) няма да работи за мен.

За да започна, просто дублирах приставката за DB и модифицирах процедурата user_login(), за да прочета хешираната парола и солта от базата данни и след това да хеширам въведената парола отново със солта и да я съпоставя с паролата в базата данни. Ето кода за моята функция user_login()

function user_login($username, $password) {

    global $CFG;

    $textlib = textlib_get_instance();
    $extusername = $textlib->convert(stripslashes($username), 'utf-8', $this->config->extencoding);
    $extpassword = $textlib->convert(stripslashes($password), 'utf-8', $this->config->extencoding);

    $authdb = $this->db_init();

    // normal case: use external db for passwords

    // Get user data
    $sql = "SELECT 
            * 
            FROM {$this->config->table} 
            WHERE {$this->config->fielduser} = '".$this->ext_addslashes($extusername)."' ";

    $authdb->SetFetchMode(ADODB_FETCH_ASSOC);

    // No DB Connection
    if ( !$rs = $authdb->Execute( $sql ) ) {
        $authdb->Close();
        print_error('auth_dbcantconnect','auth');
        return false;
    }

    // No records returned
    if( $rs->EOF ) {
        $rs->Close();
        $authdb->Close();
        return false;
    }

    // Get password
    $db_password = $rs->fields['user_password'];
    $salt = $rs->fields['user_salt'];

    // Close DB Conn
    $rs->Close();
    $authdb->Close();

    // Return match
    return sha1( $extpassword . $salt ) == $db_password;

}

Но когато се опитвам да вляза, потребителското име/паролите, съответстващи на базата данни на уебсайта (CMS), се провалят. Обаче паролата (за същия потребител), която беше съхранена в Moodle по-рано (преди да опитам да използвам този персонализиран плъгин), ми помага.

Това означава, че или моята процедура за удостоверяване е неуспешна, или вътрешният механизъм за удостоверяване, базиран на db, има предимство пред нея.

Активирах ADODB режим на отстраняване на грешки - но и това не помага. Когато активирам изхода за отстраняване на грешки от настройките на сървъра, съобщенията за грешка се изпращат преди заглавките на страниците. Така страницата за вход изобщо няма да се показва.

Имам изключени всички други форми на удостоверяване (с изключение на ръчното, което не може да се изключи) и моята собствена.

Някакви идеи как да се реши този проблем?


person miCRoSCoPiC_eaRthLinG    schedule 16.11.2009    source източник


Отговори (1)


Можете ли да потвърдите реда, в който се показват добавките за удостоверяване? Това ще определи реда, в който се използват. Вижте..

http://docs.moodle.org/en/Manage_authentication

Така или иначе, поведението, което виждате, предполага, че вашият код връща false и логиката на падане, описана тук...

http://moodle.org/mod/forum/discuss.php?d=102070

... и тук...

http://docs.moodle.org/en/Development:Authentication_plugins

... се задейства.

Опитахте ли да връщате винаги „true“ от вашия плъгин, за да сте сигурни, че се извиква. След това можете да започнете да връщате „вярно“ въз основа на други неща (твърдо кодирани потребителски имена и т.н.). Този подход ще ви позволи да стигнете до точката, в която или продължавате да се проваляте, или виждате повече целенасочени провали. Сигурни ли сте, например, че функцията user_login, а не последващото извикване на update_user_record е неуспешна?

И накрая, сигурни ли сте, че генерирате солената парола по същия начин, по който е била създадена на първо място? Това би било за мен най-вероятната причина за проблема. Можете ли да поемете контрола върху създаването на солирана парола, така че да притежавате както създаването на нови потребители, така и удостоверяването на потребителите - това ще гарантира, че сте в синхрон с начина, по който са генерирани солената парола и хеш.

person Martin Peck    schedule 16.12.2009
comment
Благодаря за отговора... Ще прегледам предложенията ви стъпка по стъпка и ще се свържа с вас.. - person miCRoSCoPiC_eaRthLinG; 17.12.2009
comment
Здравейте. Опитах се винаги да връщам true и също така коментирах целия кодов блок за update_user_record(). Въпреки това продължавам да получавам невалидно влизане. Що се отнася до реда на добавките за удостоверяване, това е 1. Ръчни акаунти, 2. Nologin и 3. моята персонализирана добавка. Не виждам опция за промяна на реда на добавките тук... въпреки че в таблицата има колона, озаглавена Нагоре/Надолу, колоната не съдържа нищо. Някакви предположения ? - person miCRoSCoPiC_eaRthLinG; 21.12.2009
comment
Забравих да спомена: Опцията auth в таблицата mdl_config обаче е зададена на моя плъгин. - person miCRoSCoPiC_eaRthLinG; 21.12.2009