そうです、ユーザーのサインアップや認証を必要としないサイトの注文フォームを作成しています。フォームには、Order、OrderImage、Printの3つのモデルがあります。注文フォームには多くのOrderImageがあり、OrderImageには多くのプリントがあります。
ユーザーには、注文とともに画像(OrderImage)をアップロードする機能と、注文が確認されて送信される前に各OrderImageに戻って編集する機能が必要です。
フォームは多段階で、次の4つのステージで構成されています。
- 画像をアップロードする
- アップロードを確認する
- あなたの詳細
- アップロードの確認
これは問題なく、すべてが計画どおりに機能しており、ユーザーが詳細を入力したり画像をアップロードしたりすると、注文プロセス全体を通じてデータがデータベースに保存されます。
ただし、これは「/ upload?order=5」などのURLが存在することを意味します。これは適切ではありません。認証がないため、これは、誰もが注文のURLを推測して変更できる可能性があることを意味します。
だから私はこのプロセスを管理するための最良の方法は何であるか疑問に思っていますか?私はいくつかのアイデアを念頭に置いていますが、それらのいずれかが問題の最善の解決策であるかどうかはわかりません。
たとえば、URLが「/ upload?order = 645029」のようになるように、6桁以内のランダムな注文番号を生成します。これにより、誰かが注文番号を推測する可能性は低くなりますが、それでも実際にはあまり安全ではありません。
上記のアイデアを「完了」などの注文のステータスと組み合わせます。したがって、注文が最終的に送信されると、完了としてマークされます。その後、「完了」注文が再度アクセスされるのを防ぐことができます。ただし、注文プロセス中に、注文番号が推測され、改ざんされる可能性があります。
セッションを利用し、注文番号をURLの代わりに、またはフォームの非表示の値としてここに保存します。
ライアン・ベイツがセッションにデータを保存するマルチステップフォームでのRailscastを見てきました。ただし、ライアン自身は、複雑なモデルとオブジェクトをこの方法で格納することは実用的ではないと認めています。
したがって、認証されていない注文フォームを処理するための最良の方法に関する提案をいただければ幸いです。