2015-04-30 13 views
5

के साथ अज्ञात उपयोगकर्ताओं को ट्रैक करने के लिए कैसे करें मेरा ऐप एक शॉपिंग कार्ट लागू करता है जिसमें अज्ञात उपयोगकर्ता अपने कार्ट को उत्पादों के साथ भर सकते हैं। उपयोगकर्ता लॉगिन केवल भुगतान से पहले आवश्यक है। इसे कैसे कार्यान्वित किया जा सकता है?फ्लास्क

मुख्य चुनौती यह है कि फ्लास्क को उपयोगकर्ता का ट्रैक रखना चाहिए (भले ही अनाम हो) और उनके आदेश। मेरा वर्तमान दृष्टिकोण AnonymousUserMixin ऑब्जेक्ट का लाभ उठाना है जो current_user पर असाइन किया गया है। धारणा यह है कि current_user पूरे सत्र में नहीं बदलेगा। हालांकि, मैंने देखा कि एक नया AnonymousUserMixin ऑब्जेक्ट current_user पर असाइन किया गया है, उदाहरण के लिए, प्रत्येक ब्राउज़र पृष्ठ रीफ्रेश पर। ध्यान दें कि ऐसा नहीं होता है यदि कोई उपयोगकर्ता प्रमाणित है।

इस पर बाधा डालने के तरीके पर कोई सुझाव?

उत्तर

8

एक कस्टम AnonymousUserMixin के लिए कोई जरूरत नहीं है, आप सत्र में खरीदारी की टोकरी डेटा रख सकते हैं:

  • अनाम उपयोगकर्ता गाड़ी hist के लिए कुछ कहते हैं -> गाड़ी डेटा
  • उपयोगकर्ता के साथ अपने सत्र को अद्यतन जांचना चाहता है -> उसे लॉग इन पेज पर रीडायरेक्ट करें
  • उपयोगकर्ता में लॉग इन किया गया है -> अपने कार्ट डेटा को सत्र से बाहर ले जाएं और यदि आप पूरे समय लॉग इन करते हैं तो वह करें जो
1

यदि आप चाहें तो AnonymousUserMixin सबक्लास का उपयोग कर सकते हैं, लेकिन आपको इसमें कुछ तर्क जोड़ने की आवश्यकता है ताकि आप प्रत्येक अज्ञात उपयोगकर्ता को अपने डेटाबेस में संग्रहीत कार्ट के साथ जोड़ सकें। एक नया उपयोगकर्ता अपने आवेदन आप यादृच्छिक रूप से जनरेट विशिष्ट आईडी आवंटित करने के लिए जोड़ता है जब

  1. :

    यह आप क्या कर सकते है। आप इस यादृच्छिक आईडी को उपयोगकर्ता सत्र में लिख सकते हैं (यदि आप चाहते हैं कि जब उपयोगकर्ता ब्राउज़र विंडो बंद कर देता है) या लंबी अवधि वाली कुकी (यदि आप ब्राउज़र को बंद करने के बाद भी कार्ट को याद रखना चाहते हैं) को कार्ट छोड़ना चाहते हैं। आप सत्र/कुकी को वास्तव में प्रबंधित करने के लिए फ्लास्क-लॉगिन का उपयोग कर सकते हैं, आपको अज्ञात उपयोगकर्ताओं को अज्ञात के रूप में इलाज करने की आवश्यकता नहीं है, जैसे ही आप उन्हें एक आईडी निर्दिष्ट करते हैं, आप उन्हें उपयोगकर्ताओं के रूप में लॉग इन कर सकते हैं।

  2. आप कैसे जानते हैं कि कोई अज्ञात उपयोगकर्ता ज्ञात है या नया है? जब उपयोगकर्ता आपको कनेक्ट करता है यह जांचता है कि सत्र या कुकी मौजूद है या नहीं, और वहां आईडी की तलाश करें। यदि कोई आईडी पाई जाती है, तो आप उपयोगकर्ता के लिए कार्ट का पता लगा सकते हैं। यदि आप AnonymousUserMixin के उप-वर्ग का उपयोग करते हैं, तो आप आईडी को सदस्य चर के रूप में जोड़ सकते हैं, ताकि आप अज्ञात उपयोगकर्ताओं के लिए भी current_user.id कर सकें। आप इस तर्क को फ्लास्क-लॉगिन उपयोगकर्ता लोडर कॉलबैक में प्राप्त कर सकते हैं।

  3. जब उपयोगकर्ता भुगतान करने के लिए तैयार होता है तो आप अज्ञात उपयोगकर्ता को पंजीकृत उपयोगकर्ता में परिवर्तित कर सकते हैं, आईडी को संरक्षित करते हैं।

  4. यदि आपके पास क्रॉन नौकरी है जो नियमित रूप से डेटाबेस से पुराने/त्याग किए गए अज्ञात गाड़ियां साफ़ करती है, तो आप पाएंगे कि एक पुराना अनाम उपयोगकर्ता उस उपयोगकर्ता आईडी को जोड़ता है और प्रदान करता है जिसमें डेटाबेस में कोई गाड़ी नहीं है (क्योंकि गाड़ी को बेकार और हटाया गया था)। आप एक ही आईडी के लिए एक नया नया कार्ट बनाकर इसे संभाल सकते हैं, और आप उपयोगकर्ता को यह भी सूचित कर सकते हैं कि कार्ट की सामग्री समाप्त हो गई थी और हटा दी गई थी।

आशा है कि इससे मदद मिलती है!

+0

धन्यवाद! क्या दुर्भावनापूर्ण उपयोगकर्ताओं से मेरे ऐप को सुरक्षित रखने का कोई तरीका है?कोई भी (i) एक गाड़ी बनाने, और (ii) लूप में सत्र (या कुकी को हटाने) को बंद कर सकता है। क्या क्रॉन जॉब (या कार्य कतार) को डेटाबेस आकार में अनियंत्रित वृद्धि से बचने में मदद करने का कोई तरीका है? प्रत्येक कार्ट निर्माण पर डेटाबेस का आकार जांचना कुछ ऐसा है जो मैं टालना चाहता हूं। – LuisO

+0

कुछ 100% मूर्खतापूर्ण नहीं है, लेकिन आप उपयोगकर्ता के आईपी पते का ट्रैक रख सकते हैं और सुनिश्चित कर सकते हैं कि आप एक ही के लिए कई गाड़ियां नहीं देते हैं। या आप सभी गाड़ियां बनाने की तारीख लिख सकते हैं, और जब आपको एक नया निर्माण करने की आवश्यकता होती है तो यह पता लगाने के लिए कि आपने पिछले एन मिनट में कितने कार्ट बनाए हैं। यदि आपको लगता है कि यह एक बड़ी संख्या है तो आप नई गाड़ियां बनाना बंद कर सकते हैं। – Miguel