Правильно, я создаю форму заказа для сайта, который не требует какой-либо регистрации пользователя или аутентификации. Форма имеет три модели: Order, OrderImage, Print. Форма заказа имеет много OrderImage и OrderImage имеет много отпечатков.
Пользователю требуется возможность загружать изображения (OrderImage's) со своим заказом, а также возможность вернуться и редактировать каждый OrderImage до подтверждения и отправки Заказа.
Форма многоступенчатая и состоит из четырех этапов:
- Загрузить изображения
- Обзор загрузок
- Ваши данные
- Подтверждение загрузки
Это нормально, и все работает как запланировано, и данные сохраняются в базе данных на протяжении всего процесса заказа, когда пользователь вводит больше деталей или загружает больше изображений.
Однако это означает, что существуют такие URL, как "/ upload? Order = 5", что не очень хорошо. Поскольку аутентификация отсутствует, это означает, что любой может угадать URL-адрес заказа и изменить его.
Так что мне просто интересно, как лучше всего управлять этим процессом? Я имею в виду пару идей, но не уверен, является ли какая-либо из них лучшим решением проблемы:
Создайте случайный номер заказа, например, из 6 цифр, чтобы URL был больше похож на: "/ upload? Order = 645029". Это приведет к снижению вероятности того, что кто-то угадает номер заказа, но на самом деле все еще не очень надежно.
Объединение вышеприведенной идеи со статусом в заказе, например, «Завершено». Поэтому, когда ордер окончательно отправлен, он помечается как завершенный. Тогда я мог бы предотвратить повторный доступ к любым «завершенным» заказам. Однако во время процесса заказа номер заказа все еще можно угадать и изменить.
Использование сеанса и сохранение номера заказа здесь, а не в URL или в качестве скрытого значения в форме.
Я наблюдал за Railscast Райана Бейтса на многоступенчатых формах, в которых он хранит данные в сеансе. Однако сам Райан признает, что хранить сложные модели и объекты таким образом нецелесообразно.
Так что любые предложения о лучшем способе обработки неаутентифицированной формы заказа будут высоко оценены, спасибо.