[Помогите] Автологин (Remember me)

Тема в разделе "OpenCart", создана пользователем junkinew, 15 фев 2017.

  1. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
    День добрый.
    На просторах инета был найден данный мод, однако он чуток кривоват. Решил подпилить его, версия ОС 1.5, но столкнулся с проблемой.
    Если авторизироваться куки сохраняются, но начинаются чудеса с корзиной, а именно: Если добавить товар в корзину он начинет умножаться до бесконечности.
    Первая мысль была, что не в том месте вписан блок (записи куков после удачной авторизации).

    Вот пример кода исходника:


    Вот уже моя корректировка мода:

    Если вставлять блок записи куков в конце тела (метода логин) в customer.php то тогда не происходит ничего...

    Может кто знает как решить сие проблему? Копать нужно только в customer.php, контроллер тут не при делах ведь?
     
  2. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
    Может помочь кто? Или никто вообще с ним не сталкивался?
     
  3. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    А что и зачем вы корректировали?
     
  4. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
    Потому как оба варианта данного модуля которые доступны в инете, "с коробки" не работают. Там руками нужно ещё править.
    Но в конечном итоге как только умирает сессия на сервере, автологин забывает юзера.
     
  5. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Значит его и нет :Smile:
    Проверьте, есть ли у вас соответствующие куки.


    Вообще, там какой-то идиотизм слепленный на скорую руку. Вместо того, чтоб писать в куки какой-то токен, по которому можно бует идентифицировать пользователя, туда пишется в открытом виде почта и хеш пароля.
    Ну, и $_COOKIE напрямую нельзя использовать. В ОК есть $this->request->cookie.
     
  6. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
    Ну вот подправив даже, все равно не хочет работать...

    Вот правка:
     
  7. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Вы не ответили на это:
     
  8. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
    Нет их.
    При авторизации оно их не создает почему-то...
     
  9. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Ну, вот с этого и надо начинать. Нет куки - нет автологина.

    Попробуйте здесь поставить по дефолту автологин включённым:
    PHP:
    function login($email$password$override false$autologin=false) {
     
  10. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
    К сожалению не помогло...

    Странно даже как-то, разве в 1.5.4 нельзя реализовать автологин?...
     
  11. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Из коробки ни одна версия ОК к нему не готова и не готова в равной степени. Но впилить можно в любую версию.
    В данном случае код изначально ущербный, так что не факт, что он вообще должен работать.
    Вполне возможно, что модификатор с установкой куки втыкается не в то место файла. Покажите модифицированный /system/library/customer.php
     
  12. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
     
  13. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Ох, что-то тут совсем бред получается. Модификатор то вписался куда надо (вариантов больше нет), но вот само место - бред. При чём двойной! Автор этого кода, если он всё именно так и задумывал - клинический идиот!
    1. Код после
    PHP:
    return false;
    выполняться не будет, ибо на этом завершается выполнение текущей функции. То есть, код, который устаналивает куки вообще не должен сработать.
    2. Даже если б этот код был перед ретурном, он бы работал так:
    - выдавал ошибку про неопределённый индекс customer_id
    - писал бы в куки пустые значения или что-то не более содержательное.

    А всё потому, что есть условие:
    PHP:
    if ($customer_query->num_rows) {
    которым проверяется удалось ли опознать пользователя. Если удалось выполняется первый блок кода, если нет - второй. И именно в этот второй блок кода и вставлен модификатором код, который должен писать в куки данные позволяющие в будущем опознать пользователя. То есть, он вставлен в участок, который выполняется только при неудачных попытках входа. Соответственно, при таких попытках в куки нечего писать.

    В общем, вот это:
    PHP:
    if($autologin) {
                    
    $salt $this->db->query("SELECT salt FROM " DB_PREFIX "customer WHERE customer_id = '".$customer_query->row['customer_id']."'")->row['salt'];
                    
    $password_c sha1($salt sha1($salt sha1($password)));
                    
    setcookie('em'$emailtime()+60 60 24 30);
                    
    setcookie('p'$password_ctime()+60 60 24 30);
                }
    Должно быть перед:
    PHP:
    return true;
     
    Vivec нравится это.
  14. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
    К сожалению, без результатно...
    Опустил руки(
     
  15. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Если вы переместили указанный кусок кода в указанное место, то автоллогин теперь должен заработать. По крайней мере, куки точно должны появиться.
     
  16. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    проще купить готовенькое за 300р. чем тратить время на то чтобы рассказать как это должно работать

    Это полный бред хранить в куках и логи и пароль, даже закрытый солью
    --- Добавлено, 27 июл 2017 ---
    А это?

    Код:
    password = '".$password."
    
    Здравствуй SQL Inj
     
  17. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
    Ну сделал как Вы указали, так и не заработало, не хочет оно куки записывать...
     
  18. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    смотрит в лог ошибок

    autologin только в валидации, как локальная переменная.
     
  19. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Вот и я о том же:

    Покажите, как теперь выглядит модифицированный файл.
     
  20. junkinew

    junkinew

    Регистрация:
    11 фев 2017
    Сообщения:
    23
    Симпатии:
    2
    И 2й файл:
     
    Vivec нравится это.