对,我正在为不需要任何类型的用户注册或身份验证的网站构建订单。该表单具有三种模型:Order、OrderImage、Print。一个订单有很多 OrderImage,一个 OrderImage 有很多 Prints。
用户需要能够随订单上传图像(OrderImage),并且还需要能够在订单被确认和提交之前返回并编辑每个 OrderImage。
该表格是多步骤的,由四个阶段组成:
- 上传图片
- 审核上传
- 你的资料
- 确认上传
这很好,一切都按计划进行,并且随着用户输入更多详细信息或上传更多图像,数据在整个订单过程中存储到数据库中。
但是,这意味着存在诸如“/upload?order=5”之类的 URL,这是不好的。因为没有身份验证,这意味着任何人都可能猜测订单的 URL 并更改它。
所以我只是想知道管理这个过程的最佳方法是什么?我有几个想法,但不确定它们是否是解决问题的最佳方法:
例如,生成一个 6 位数以内的随机订单号,这样 url 就会更像:“/upload?order=645029”。这将导致有人猜测订单号的机会减少,但实际上仍然不是很安全。
将上述想法与订单上的状态相结合,例如“完成”。因此,当最终提交订单时,它被标记为完成。然后我可以防止再次访问任何“完成”订单。但是,在下单过程中,订单号仍然可以被猜测和篡改。
利用会话并将订单号存储在此处而不是 URL 中,或者作为表单中的隐藏值。
我看过 Ryan Bates 的关于多步表单的 Railscast,他在会话中存储数据。然而,Ryan 本人承认,以这种方式存储复杂的模型和对象是不切实际的。
因此,任何有关处理未经身份验证的订单的最佳方式的建议将不胜感激,谢谢。