右のように、ユーザーのサインアップや認証を一切必要としないサイトのオーダーフォームを作成しています。フォームには、Order、OrderImage、Printという3つのモデルがあります。オーダーフォームには多くのOrderImageがあり、OrderImageには多くのプリントがあります。認証なしの安全なRails 3 MultiStepオーダーフォームのベストアプローチ
画像をアップロードする機能(OrderImage's)と、Orderを確認して送信する前に、各OrderImageを元に戻して編集する機能が必要です。
フォームは多段階であり、4つのステージで構成された:
- アップロード画像
- レビューアップロード
- あなたの詳細
- 確認アップロード
これは素晴らしいですし、すべてがあります計画どおりに作業し、ユーザーが詳細を入力したり、アップロードしたりすると、Orderプロセス全体を通じてデータがデータベースに保存されます。再画像。
しかし、これは「/ upload?order = 5」などのURLが存在しないことを意味します。認証がないため、誰でも注文のURLを推測して変更する可能性があります。
私はこのプロセスを管理する最良の方法が何であるか疑問に思っていますか?私は心の中でアイデアのカップルを得たが、それらのいずれかが問題に最適なソリューションであればわからないしました:
URLはもっとようになるので、例えば6桁以内でランダムな順序番号を生成します: "/ upload?order = 645029"となります。これは、誰かが注文番号を推測する機会が少なくなるが、実際にはそれほど安全ではないことにつながる。
上記の考えを「完了」などの注文状況と組み合わせると、したがって、注文書が最終的に提出されると、それは完全とマークされます。その後、「Complete」注文に再度アクセスすることを防ぐことができます。しかし、注文処理中に注文番号は推測され、改ざんされる可能性があります。
セッションを利用してURLの代わりに注文番号をここに格納するか、フォームの隠し値として保存します。
私はRyan Batesの「Railscast on Multistep」形式で、セッションにデータを格納するのを見ました。しかし、Ryan自身は、複雑なモデルやオブジェクトをこのように格納することは実用的ではないことを認めています。
したがって、認証されていないオーダーフォームを処理するための最良の方法については、ありがとうございます。ありがとうございます。
Btw、この例を使用する場合は、型に注意してください。 'params [:id]'は文字列であり、 'session [:current_order_id]'は文字列か整数かもしれません。 – David