Joomla3 二次开发 增长discuz的登录验证方式

这个与密码验证相关的文件的位置是 (注意是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 关联的数据 不然是没法登录的。

相关文章
相关标签/搜索