2015-12-21 46 views
1

我設置了Moodle 3.0以允許我的CMS(使用框架CakePHP 2.6開發)的用戶登錄到Moodle。這兩個數據庫位於同一臺服務器上。我使用Moodle的「外部數據庫」選項,它似乎是最簡單的解決方案。Moodle外部數據庫認證與鹽散裝

根據Moodle Docs的腳本/path/to/moodle/auth/db/cli/sync_users.php將用戶從外部數據庫(CMS)導入到Moodle,這很好用,但是使用來自外部數據庫的憑據(用戶名和密碼)登錄到Moodle不起作用。

我認爲這個問題可能是在「外部數據庫」設置中的「格式化密碼」(我正在使用SHA-1散列)。因爲在CakePHP中有密碼散列(使用salt的SHA1)。當我將「格式化密碼」設置爲「純文本」時,它可以工作,但這不是我想要的。有什麼方法可以解決這個問題?

https://docs.moodle.org/27/en/External_database_authentication

回答

1

,我想出了一個解決我的問題,但我不得不改變只有一行的Moodle的代碼,這是我試圖避免。我試過「格式化密碼」來「加密單向散列」選項,但沒有成功。

CakePHP的我的服務器上這樣散列密碼:

$string = $salt_key . $password; 
sha1($string); 

因此,在與「外部數據庫」 Moodle的身份驗證我已經修改了文件/path/to/moodle/auth/db/auth.php,並添加以下內容:

// I've just add this line: 
// $extpassword = '<your_salt_key_here>' . $extpassword; 

if ($this->config->passtype === 'plaintext') { 
    return ($fromdb == $extpassword); 
} else if ($this->config->passtype === 'md5') { 
    return (strtolower($fromdb) == md5($extpassword)); 
} else if ($this->config->passtype === 'sha1') { 
    $extpassword = '<your_salt_key_here>' . $extpassword; // Add this line 
    return (strtolower($fromdb) == sha1($extpassword)); 
} else if ($this->config->passtype === 'saltedcrypt') { 
    require_once($CFG->libdir.'/password_compat/lib/password.php'); 
    return password_verify($extpassword, $fromdb); 
} else { 
    return false; 
}