Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.05.2021, 16:04
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

Как должна работать функция добавления товара в корзину?
Pдравствуйте. Пытаюсь сделать интернет магазин и столкнулась с проблемой: "Как сделать добавление товара в корзину?". На данный момент я сделала так:
  1. При нажатии на кнопку "в корзину", js обращается к родителю, а затем ищет ребёнка, у которого span.class = name и span.class = size
  2. Эти данные заносятся в массив, переводятся в json и загружаются в cookie (не сессия). То есть дешифрованные куки выглядят примерно так: [["apple", "big"],["orange", "medium"]];
  3. На странице корзины я через php ловлю куки и делаю запрос в базу, чтобы вытащить фотографии и цены. И вывожу всё это богатство через foreach в виде таблицы на страницу.
  4. Далее пользователь заполняет форму (имя, телефон), ждёт "оформить заказ" и в базу "заказы" отправляется содержимое куков.
  5. В базе "заказы" появляется новый заказ.

Я использую headless cms Cockpit, которая использует файловую MongoDB. Понимаю, что это ничего вам не даст, но просто говорю. Считайте, что cms у меня вообще нет.

Теперь вопросы.
1. Я уже сама понимаю, что 1 этап - не комильфо. Как минимум потому что можно в инспекторе изменить название блока name и в корзину уйдёт товар, которого вообще нет в базе.
Я предполагаю, что эту проблему можно решить с помощью ajax, который в начале отправит запрос в базу на проверку существования такого товара, а потом уже добавит его в куки в случае успеха. Скажите, на сколько я права? Так ли это делается и верно ли я мыслю?
2. Как должна происходить процедура "покупки"? Меня смущает, что пользователь имеет доступ кукам (как и первом случае заказ собирается из текста). Верно ли я мыслю, когда "оформляю заказ", отправляя куки? Как я должна действовать?
3. Так как заказ собирается из текста и из кук, то на сколько уязвимо это? Может ли злоумышленник изменить название товара так, чтобы получить доступ к БД и к моим API ключам. И если да, то как мне себя обезопасить?
Ответить с цитированием
  #2 (permalink)  
Старый 12.05.2021, 17:08
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,706

Корзина должна находиться не у пользователя на устройстве, а на сервере.
Можете хранить её в БД или в сессии пользователя, оба варианта значительно лучше, чем куки.

Лучше всего хранить корзину в БД и привязывать её уникальному идентификатору пользователя, который будет сохранен ему в куки, либо к идентификатору аккаунта этого пользователя, если он авторизован на сайте.

Перед добавлением товара в корзину нужно производить проверку на существование товара и на его доступность для пользователя.
Все хорошо - добавили товар в корзину, плохо - уведомили об этом.

Передавать на backend название товара и его размер - бред, передавать нужно идентификаторы и с ними работать.

Кнопку «В корзину» лучше всего запихнуть в форму, которая будет содержать всю необходимую информацию о товаре. В этом случае не придется бегать по дереву DOM, чтобы достать нужные значение. Нужна асинхронность - слушаем событие формы submit и отправляем данные на сервер самостоятельно.

Сообщение от nastya97core
3. Так как заказ собирается из текста и из кук, то на сколько уязвимо это? Может ли злоумышленник изменить название товара так, чтобы получить доступ к БД и к моим API ключам. И если да, то как мне себя обезопасить?
Зависит от backend'а. Читайте про SQL injection.

Последний раз редактировалось Nexus, 12.05.2021 в 17:11.
Ответить с цитированием
  #3 (permalink)  
Старый 12.05.2021, 17:22
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

2. Эти данные отправляются на сервер и записываются в базу данных. Зайдя с любого устройства пользователь может увидеть свою корзину.
3. При авторизации пользователя смотрим есть ли, что у него в корзине и отображаем
4. При прдтверждении заказа чистим(переносим) даннные из таблицы корзины. Пишем заказ в историю заказов пользователя с текущими на текущий момент ценами.
5. Выставляем счет, через платежную систему. Ждем колбек от оплаты
делаем куки HttpOnly
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно работать с диапазоном в d3.js? gsdev99 Элементы интерфейса 2 29.01.2020 08:28
как получить значение span id='cena_###' (### - id товара) kravru Элементы интерфейса 1 28.01.2018 10:54
Как в html форме вместе с файлом передать переменную kupidon Общие вопросы Javascript 7 22.01.2018 14:55
Как работать со startContainer, endContainer и подобным? Бобр Общие вопросы Javascript 6 06.02.2010 20:47
Как вызывается функция? Мараторий Общие вопросы Javascript 3 22.01.2010 13:18