Нуб, способ входа пользователя в Prestashop

Это пошаговое руководство о том, как выполнить вход пользователя в prestashop, не проходя через экран входа в систему. Это полезно, если вы не хотите, чтобы пользователь снова входил в систему, например, когда вы хотите перенести его сеанс с одного веб-сайта в prestashop.

Шаг 1 Устраните необходимость в добавлении пароля. В config / settings.inc.php установите _COOKIE_KEY_ в пустое значение. Обратите внимание, это также означает, что вы должны создать нового клиента. Или вы можете удалить старый пароль md5 из БД и добавить свой собственный.

Шаг 2 В файле authentication.php вставьте следующие строки после строки 6:

                    $customer = new Customer();
                    //$authentication = $customer->getByEmail(trim($email), trim($passwd));
                    $authentication = $customer->getByMd5(trim($email), trim($passwd)); //modified version of getByEmail if we are not accepting  $passwd in cleartext but in md5.
                    /* Handle brute force attacks */
                    sleep(1);
                    if (!$authentication OR !$customer->id)
                        $errors[] = Tools::displayError('authentication failed');
                    else
                    {
                        $cookie->id_customer = intval($customer->id);
                        $cookie->customer_lastname = $customer->lastname;
                        $cookie->customer_firstname = $customer->firstname;
                        $cookie->logged = 1;
                        $cookie->passwd = $customer->passwd;
                        $cookie->email = $customer->email;
                        if (Configuration::get('PS_CART_FOLLOWING') AND (empty($cookie->id_cart) OR Cart::getNbProducts($cookie->id_cart) == 0))
                            $cookie->id_cart = intval(Cart::lastNoneOrderedCart(intval($customer->id)));
                        Module::hookExec('authentication');
                        if ($back = Tools::getValue('back'))
                            Tools::redirect($back);
                        //Tools::redirect('my-account.php'); //cut redirection to break infinite loop
                    }

Приведенный выше код заставляет пользователя входить в систему с использованием $ email в качестве имени пользователя и $ passwd в качестве пароля в открытом виде. Исходный код взят из if (Tools :: isSubmit (' SubmitLogin ')) внутри файла authentication.php.

Шаг 3 Вставьте приведенный выше код в файл products.php сразу под строкой 5

Шаг 4 Если вы отправляете $ passwd напрямую в формате md5, вот модифицированная версия getByEmail () (customer.php) :

public function getByMd5($email, $passwd = NULL)
    {    
        $result = Db::getInstance()->GetRow('SELECT * FROM `'._DB_PREFIX_   .'customer` WHERE `active` = 1 AND `email` = \''.pSQL($email).'\'  '.(isset($passwd) ? 'AND `passwd` = \''.pSQL(_COOKIE_KEY_.$passwd).'\'' : '').' AND `deleted` = 0');

        if (!$result)
            return false;
        $this->id = $result['id_customer'];
        foreach ($result AS $key => $value)
            if (key_exists($key, $this))
                $this->{$key} = $value;

        return $this;       
    }

Вы можете получить доступ к имени пользователя / паролю либо через функцию $ _COOKIE [], либо через $ _GET []. В любом случае это большой риск для безопасности. Считывание файлов cookie можно поместить в файл index.php.

1
задан mahen23 16 October 2010 в 12:03
поделиться