Войти за пределами Joomla, используя Curl - PullRequest
0 голосов
/ 07 мая 2011

Я попытался сделать это на своем веб-сайте, и у меня есть этот код, который работает в одной из моих установок Joomla, но он не работает в другой установке Joomla. На установке, которая не работает, скрипт выполняет поиск в базе данных и находит учетные данные пользователя, но когда он переходит на mywebsite.com, он не входит в систему. Пароль пользователя не зашифрован, это еще одно поле, которое я использую только для этой цели. Может кто-нибудь помочь мне выяснить, в чем дело?

<?php
mysql_connect("localhost", "sqluser", "sqlpass") or die(mysql_error());
mysql_select_db("sqldb") or die(mysql_error());
$uname = $_POST['username'];
$upswd = $_POST['password'];
$result_user = mysql_query("SELECT username FROM jos_users where username = '$uname'") or die(mysql_error());
$rows_user = mysql_num_rows($result_user);
$result_pass = mysql_query("SELECT vm_pass_lojat FROM jos_vm_user_info where vm_pass_lojat = '$upswd'") or die(mysql_error());
$rows_pass = mysql_num_rows($result_pass);
if($rows_user > 0){ 
    if($rows_pass > 0){ 
        $url = "http://www.mywebsite.com/online/index.php";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
        curl_setopt($ch, CURLOPT_COOKIEJAR, realpath('./cookie.txt'));
        curl_setopt($ch, CURLOPT_COOKIEFILE, realpath('./cookie.txt'));
        curl_setopt($ch, CURLOPT_HEADER, TRUE);
        $ret = curl_exec($ch);
        if (!preg_match('/name="([a-zA-z0-9]{32})"/', $ret, $spoof)){
             preg_match("/name='([a-zA-z0-9]{32})'/", $ret, $spoof);
            }
        // POST fields
        $postfields = array();
        $postfields['username'] = urlencode($uname);
        $postfields['passwd'] = urlencode($upswd);
        $postfields['option'] = 'com_user';
        $postfields['task'] = 'login';
        $postfields[$spoof[1]] = '1';
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
        $ret = curl_exec($ch);
        // Get logged in cookie and pass it to the browser
        preg_match('/^Set-Cookie: (.*?);/m', $ret, $m);
        $cookie = explode('=', $m[1]);
        setcookie($cookie[0], $cookie[1]);
        header("location:  http://www.mywebsite.com/online/index.php");
        }
    else
        {
        echo "WRONG PASSWORD";
    }
    }
else
    {
    echo "NO USER FOUND";
}
?>

1 Ответ

0 голосов
/ 28 мая 2011

Плагин аутентификации в бэкэнде может быть не активен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...