Joomla手动登录控制器

时间:2012-01-19 23:07:45

标签: php facebook-graph-api joomla joomla1.5

我正在为Joomla开发一个组件。它与流行的社交网站集成。我通过给定的社交个人资料从数据库中检索用户信然后,我尝试使用以下代码登录此用户:

$fbuser = $facebook->api(
                '/me',
                'GET',
                array(
                    'access_token' => $_SESSION['active']['access_token']
                )
            );

            // Get a database object
            $db =& JFactory::getDBO();
            $query = "SELECT * FROM #__users WHERE email = '".$fbuser['email']."';";
            $db->setQuery($query);
            $row = $db->loadRow();

            if(isset($row))
            {
                $app = JFactory::getApplication();
                $user =& JUser::getInstance($row[0]);

                $credentials = array();
                $credentials['username'] = $user->get('username');
                $credentials['password'] = $user->get('password'); // When I change this to related users plain password then it works

            $options = array();
                $options['remember']     = true;
                $options['silent']     = true;

                $app->login($credentials, $options);
            }
            else
            {
                return 'There is no account associated with facebook';
            }

问题是数据库返回编码密码,这不起作用。当我将解码的密码提供给$凭证时,它可以工作。可能是什么问题?

3 个答案:

答案 0 :(得分:2)

一个选项是创建自己的身份验证插件(非常简单的任务),该插件可以使用只有您和站点知道的特定密码登录任何用户。

然后您可以提供该密码以及已知用户名。

为了安全起见,只允许该插件登录普通用户,而不是管理员。

答案 1 :(得分:0)

你需要MD5哈希pwd(它存储在数据库中的方式)。

试试这个:

$salt = '19IQYkelXrqVH1Eht6PFOIZRe5T1SQHs';
$pwd = md5_hex($pwd .  $salt) .":$salt";
$query = "select name,username,email,password from jos_users where password = $pwd;";
...

答案 2 :(得分:0)

            // --- login mamanam.com
            $app = JFactory::getApplication();      
            $credentials = array();
            $credentials['username'] = $username;
            $credentials['password'] = $password;
            $app->login($credentials);

数组中的必要参数$ credentials = array()用于登录函数Joomla! $ app->登录($凭证)

*对不起我的英语不太好