7

私のアプリは、匿名ユーザーがカートに商品を入れることができるショッピング カートを実装しています。ユーザーログインは支払い前にのみ必要です。これはどのように実装できますか?

主な課題は、フラスコがユーザー (匿名であっても) とその注文を追跡しなければならないことです。私の現在のアプローチは、 にAnonymousUserMixin割り当てられているオブジェクトを活用することcurrent_userです。前提はcurrent_user、セッション全体で変更されないことです。ただし、たとえば、ブラウザのページが更新されるたびに、新しいAnonymousUserMixinオブジェクトが に割り当てられていることに気付きました。current_userユーザーが認証されている場合、これは発生しないことに注意してください。

これを回避する方法について何か提案はありますか?

4

2 に答える 2

9

custom は必要ありませんAnonymousUserMixin。ショッピング カートのデータをセッションに保持できます。

  • 匿名ユーザーがカートに何かを追加 -> カートのデータでセッションを更新
  • ユーザーがチェックアウトしたい -> ログインページにリダイレクト
  • ログインしたユーザーがチェックアウト時に戻ってきた -> カートのデータをセッションから取り出し、彼がずっとログインしていた場合に行うことをすべて行う
于 2015-04-30T08:06:01.590 に答える
4

必要に応じてサブクラスを使用できますAnonymousUserMixinが、データベースに保存されているカートに各匿名ユーザーを関連付けることができるように、いくつかのロジックをサブクラスに追加する必要があります。

これはあなたができることです:

  1. 新しいユーザーがアプリケーションに接続すると、ランダムに生成された一意の ID が割り当てられます。このランダム ID をユーザー セッション (ユーザーがブラウザー ウィンドウを閉じたときにカートをドロップする場合) または長期 Cookie (ブラウザーを閉じた後でもカートを記憶したい場合) に書き込むことができます。セッション/Cookieを実際に管理するためにFlask-Loginを使用できます。不明なユーザーを匿名として扱う必要はありません。IDを割り当てるとすぐに、ログインしたユーザーとして扱うことができます。

  2. 匿名ユーザーが既知か新規かをどのように判断しますか? ユーザーが接続すると、セッションまたは Cookie が存在するかどうかを確認し、そこで ID を探します。ID が見つかった場合は、ユーザーのカートを見つけることができます。のサブクラスを使用する場合はAnonymousUserMixin、id をメンバー変数として追加できるためcurrent_user.id、匿名ユーザーに対しても実行できます。このロジックは、Flask-Login ユーザー ローダー コールバックに含めることができます。

  3. ユーザーが支払う準備ができたら、匿名ユーザーを登録ユーザーに変換し、ID を保持します。

  4. データベースから古い/放棄された匿名カートを定期的にクリーンアップする cron ジョブがある場合、古い匿名ユーザーが接続し、データベースにカートを持たないユーザー ID を提供することがあります (カートが古いと見なされ、削除されました)。これは、同じ ID の新しいカートを作成することで処理できます。また、カートの内容が期限切れになり、削除されたことをユーザーに通知することもできます。

お役に立てれば!

于 2015-05-02T23:48:40.033 に答える