這個與密碼驗證相關的文件的位置是 (注意是Joomla3.x 其它版本暫時沒研究) :php
JOOMLA/plugins/authentication/joomla/joomla.php sql
首先要把discuz的ucenter_members表的數據 導入到 Joomla的users表 具體的本身作吧
app
關於密碼的格式 個人處理方式是把 discuz的拼湊成 Joomla那種字符串的 :學習
$uc$/password/salt
這種樣式 其中password跟salt都是discuz的數據code
Joomla關於會員信息的表只有兩張 一個users 還有一個user_usergroup_map(暫時無論)token
因此導入時候 只要把ucenter_members改造一下就行了 自行導入到joomla的users表吧
md5
要修改的部分是
字符串
// Get a database object $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('id, password') ->from('#__users') ->where('username=' . $db->quote($credentials['username'])); $db->setQuery($query); $result = $db->loadObject();
後面開始
get
//導出discuz會員表 ucenter 關於discuz的password跟salt處理方式是 //組合成爲 $uc$/password/salt 後面經過'/'切割 方便使用discuz的公式驗證密碼 if( substr( $result->password, 0 , 4) == '$uc$') { // discuz具體的驗證方法是 $saltpassword = md5( md5( $plaintext_password ) . $salt); $str = explode( '/', $result->password); $match = md5( md5( $credentials['password']) . $str[2]) === $str[1] ? true : false; } else if (substr($result->password, 0, 4) == '$2y$') { // BCrypt passwords are always 60 characters, but it is possible that salt is appended although non standard. $password60 = substr($result->password, 0, 60); if (JCrypt::hasStrongPasswordSupport()) { $match = password_verify($credentials['password'], $password60); } } elseif (substr($result->password, 0, 8) == '{SHA256}') { // Check the password $parts = explode(':', $result->password); var_dump( $parts); $crypt = $parts[0]; $salt = @$parts[1]; $testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt, 'sha256', false); if ($result->password == $testcrypt) { $match = true; } } else { // Check the password $parts = explode(':', $result->password); var_dump( $parts); $crypt = $parts[0]; $salt = @$parts[1]; $testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt, 'md5-hex', false); if ($crypt == $testcrypt) { $match = true; } }
這樣應該差很少了,我繼續研究看看還有什麼要作的。初次學習joomla ,多多指教。it
補充 還有建立分組的數據 表名叫 user_usergroup_map
在這裏建立 user 跟 group 關聯的數據 不然是沒法登錄的。