2015-04-30 8 views
5

Meine App implementiert einen Einkaufswagen, in dem anonyme Benutzer ihren Einkaufswagen mit Produkten füllen können. Benutzeranmeldung ist nur vor Bezahlung erforderlich. Wie kann dies umgesetzt werden?So verfolgen Sie anonyme Benutzer mit Flask

Die größte Herausforderung besteht darin, dass flask den Benutzer (auch wenn anonym) und ihre Bestellungen verfolgen muss. Mein derzeitiger Ansatz besteht darin, das Objekt AnonymousUserMixin zu nutzen, das current_user zugewiesen ist. Die Annahme ist, dass sich current_user während der gesamten Sitzung nicht ändert. Ich bemerkte jedoch, dass ein neues Objekt AnonymousUserMixincurrent_user zugewiesen wird, zum Beispiel bei jeder Aktualisierung der Browserseite. Beachten Sie, dass dies nicht geschieht, wenn ein Benutzer authentifiziert wird.

Haben Sie Vorschläge, wie Sie das umgehen können?

Antwort

8

Es besteht keine Notwendigkeit für einen benutzerdefiniertes ist AnonymousUserMixin, können Sie die Warenkorb-Daten in Sitzung halten:

  • anonyme Benutzer fügen etwas Warenkorb auf hist -> seine Sitzung aktualisieren mit den Warenkorb Daten
  • der Benutzer will auschecken -> umleiten ihn zur Anmeldeseite
  • eingeloggter Benutzer ist zurück beim Auschecken -> nimm seine Warenkorb Daten aus der Sitzung und tue was immer du tun würdest wenn er die ganze Zeit eingeloggt war
1

Sie können eine Unterklasse AnonymousUserMixin verwenden, wenn Sie möchten, aber Sie müssen eine Logik hinzufügen, damit Sie jedem anonymen Benutzer einen Einkaufswagen zuordnen können, der in Ihrer Datenbank gespeichert ist. Diese

ist das, was Sie tun können:

  1. Wenn ein neuer Benutzer auf Ihre Anwendung verbindet weisen Sie eine zufällig generierte eindeutige ID. Sie können diese zufällige ID in die Benutzersitzung schreiben (wenn der Warenkorb gelöscht werden soll, wenn der Benutzer das Browserfenster schließt) oder in einen langlebigen Cookie (wenn der Warenkorb auch nach dem Schließen des Browsers gespeichert werden soll). Sie können Flask-Login verwenden, um die Sitzung/das Cookie tatsächlich zu verwalten. Sie müssen unbekannte Benutzer nicht als anonym behandeln, sobald Sie ihnen eine ID zuweisen, können Sie sie als eingeloggte Benutzer behandeln.

  2. Woher wissen Sie, ob ein anonymer Benutzer bekannt oder neu ist? Wenn der Benutzer eine Verbindung herstellt, überprüfen Sie, ob die Sitzung oder der Cookie vorhanden sind, und suchen Sie dort nach der ID. Wenn eine ID gefunden wird, können Sie den Warenkorb für den Benutzer finden. Wenn Sie eine Unterklasse von AnonymousUserMixin verwenden, können Sie die ID als Elementvariable hinzufügen, sodass Sie auch für anonyme Benutzer current_user.id ausführen können. Sie können diese Logik im Callback für den Rückruf von Flask-Login-Benutzern verwenden.

  3. Wenn der Benutzer bereit ist, Sie zu bezahlen, konvertieren Sie den anonymen Benutzer in einen registrierten Benutzer unter Beibehaltung der ID.

  4. Wenn Sie einen Cronjob haben, der routinemäßig alte/verlassene anonyme Wagen aus der Datenbank räumt, stellen Sie möglicherweise fest, dass ein alter anonymer Benutzer eine Benutzer-ID herstellt, die keinen Einkaufswagen in der Datenbank enthält Warenkorb wurde als veraltet angesehen und gelöscht). Sie können damit umgehen, indem Sie einen neuen Einkaufswagen für dieselbe ID erstellen, und Sie können den Benutzer sogar darüber informieren, dass der Inhalt des Einkaufswagens abgelaufen ist und entfernt wurde.

hoffe, das hilft!

+0

Danke! Gibt es eine Möglichkeit, meine App vor bösartigen Benutzern zu schützen?Jemand könnte angreifen, indem er (i) einen Einkaufswagen erstellt und (ii) die Sitzung in einer Schleife schließt (oder den Cookie löscht). Gibt es eine Möglichkeit, den Cron-Job (oder die Task-Warteschlange) dazu zu bringen, einen unkontrollierten Anstieg der Datenbankgröße zu vermeiden? Das Überprüfen der Größe der Datenbank bei jeder Warenkorb-Erstellung möchte ich vermeiden. – LuisO

+0

Es gibt nichts, das 100% idiotensicher ist, aber Sie können die IP-Adresse des Benutzers verfolgen und sicherstellen, dass Sie nicht mehrere Wagen für denselben Benutzer zulassen. Oder Sie könnten das Erstellungsdatum auf alle Wagen schreiben, und wenn Sie einen neuen erstellen müssen, führen Sie eine Abfrage durch, um herauszufinden, wie viele Wagen Sie in den letzten N Minuten erstellt haben. Wenn Sie feststellen, dass es sich um eine große Anzahl handelt, können Sie keine neuen Wagen mehr erstellen. – Miguel

Verwandte Themen