इस लेख में, मैं साझा करूंगा कि कैसे मैंने ईमेल पुष्टिकरण के साथ एक सदस्यता साइन अप प्रवाह को प्यार से बनाया जो बेकार नहीं है। तुम से भी हो सकता है।
यदि आप इसे कार्य करते हुए देखना चाहते हैं, तो अब आप मेरी ईमेल सूची के लिए विक्टोरिया.देव पर सदस्यता ले सकते हैं।
अब, मैं आपको दिखाता हूँ कि मैंने इसे कैसे बनाया।
सरल सदस्यता का परिचय
यदि आप अपनी स्वयं की मेलिंग सूची या न्यूज़लेटर को प्रबंधित करने में रुचि रखते हैं, तो आप ईमेल पते एकत्र करने के लिए अपने स्वयं के AWS संसाधनों पर सरल सदस्यता सेट कर सकते हैं।
यह ओपन सोर्स एपीआई गो में लिखा गया है, और एडब्ल्यूएस लैम्ब्डा पर चलता है। आपकी साइट के विज़िटर आपकी सूची में साइन अप कर सकते हैं, जो एक डायनेमोडीबी तालिका में संग्रहीत है, जो आपके अवकाश पर पूछताछ या निर्यात करने के लिए तैयार है।
जब कोई साइन अप करता है, तो उन्हें एक ईमेल प्राप्त होगा जिसमें उनसे अपनी सदस्यता की पुष्टि करने के लिए कहा जाएगा। इसे कभी-कभी "डबल ऑप्ट-इन" कहा जाता है, हालांकि मैं "सत्यापित" शब्द को प्राथमिकता देता हूं।
सिंपल सब्सक्राइब सर्वर रहित बुनियादी ढांचे पर काम करता है और सदस्यता, पुष्टिकरण और सदस्यता समाप्त करने के अनुरोधों को संभालने के लिए AWS लैम्ब्डा का उपयोग करता है।
आप सिंपल सब्स्क्राइब प्रोजेक्ट पा सकते हैं, इसके पूरी तरह से ओपन-सोर्स कोड के साथ, GitHub पर। मैं आपको कोड को ऊपर खींचने और साथ चलने के लिए प्रोत्साहित करता हूं!
इस पोस्ट में मैं प्रत्येक निर्माण चरण, एपीआई के एकल-जिम्मेदारी कार्यों के पीछे की विचार प्रक्रिया, और इस तरह की एक एडब्ल्यूएस परियोजना के लिए सुरक्षा संबंधी विचार साझा करूंगा।
एक सत्यापित सदस्यता प्रवाह कैसे बनाएं
एक गैर-सत्यापित ईमेल साइन अप प्रक्रिया सीधी है। कोई व्यक्ति अपना ईमेल आपकी वेबसाइट के एक बॉक्स में डालता है, फिर वह ईमेल आपके डेटाबेस में चला जाता है।
हालांकि, अगर मैंने आपको उपयोगकर्ता इनपुट पर भरोसा न करने के बारे में कुछ भी सिखाया है, तो एक गैर-सत्यापित साइन अप प्रक्रिया का विचार आपके हैकल्स को बढ़ा देना चाहिए। सैंडविच में तले जाने पर स्पैम बहुत अच्छा हो सकता है, लेकिन जब यह आपके AWS बिल को बढ़ा रहा हो तो इसका कोई मज़ा नहीं है।
जब आप एक मानव सत्यापन के लिए कैप्चा या पहेली जैसी रणनीति का उपयोग कर सकते हैं, तो ये आपके संभावित ग्राहकों को दूर करने के लिए पर्याप्त घर्षण पैदा कर सकते हैं।
इसके बजाय, एक पुष्टिकरण ईमेल पते की शुद्धता और उपयोगकर्ता की भावना दोनों को सुनिश्चित करने में मदद कर सकता है।
ईमेल पुष्टिकरण के साथ सदस्यता प्रवाह बनाने के लिए, एकल-जिम्मेदारी फ़ंक्शन बनाएं जो प्रत्येक तार्किक चरण को पूरा करें। वे हैं:
- एक ईमेल पता स्वीकार करें और उसे रिकॉर्ड करें।
- उस ईमेल पते से संबद्ध एक टोकन जेनरेट करें और उसे रिकॉर्ड करें।
- टोकन के साथ उस ईमेल पते पर एक पुष्टिकरण ईमेल भेजें।
- एक सत्यापन अनुरोध स्वीकार करें जिसमें ईमेल पता और टोकन दोनों हों।
इन लक्ष्यों में से प्रत्येक को प्राप्त करने के लिए, सरल सदस्यता डायनेमोडीबी और एसईएस के साथ बातचीत करने के लिए आधिकारिक एडब्ल्यूएस एसडीके का उपयोग करती है।
प्रत्येक चरण में, विचार करें कि डेटा कैसा दिखता है और आप इसे कैसे संग्रहीत करते हैं। यह पहेली को संभालने में मदद कर सकता है, जैसे "क्या होता है अगर कोई दो बार सदस्यता लेने की कोशिश करता है?" या यहां तक कि धमकी-मॉडलिंग जैसे, "क्या होगा यदि कोई ऐसे ईमेल के साथ सदस्यता लेता है जो उसके पास नहीं है?"
तैयार? आइए प्रत्येक चरण को तोड़ें और देखें कि जादू कैसे होता है।
सदस्यता लेना
सदस्यता प्रक्रिया एक विनम्र वेब फॉर्म के साथ शुरू होती है, जैसे मेरी साइट के मुख्य पृष्ठ पर। विशेषताओं के साथ एक फॉर्म इनपुट type="email" required
सत्यापन में मदद करता है, ब्राउज़र के लिए धन्यवाद। सबमिट किए जाने पर, फ़ॉर्म सिंपल सब्सक्रिप्शन सब्सक्रिप्शन एंडपॉइंट को एक GET अनुरोध भेजता है।
सिंपल सब्स्क्राइब को इस एंडपॉइंट के लिए एक क्वेरी स्ट्रिंग के साथ एक GET अनुरोध प्राप्त होता है जिसमें इच्छित सब्सक्राइबर का ईमेल होता है। यह तब एक id
. उत्पन्न करता है मान देता है और दोनों email
जोड़ता है और id
आपकी DynamoDB तालिका में।
टेबल आइटम अब इस तरह दिखता है:
पुष्टि करें | id | timestamp | |
---|---|---|---|
[email protected] | झूठा | uuid-xxxxx | 2020-11-01 00:27:39 |
confirm
कॉलम, जिसमें एक बूलियन है, इंगित करता है कि आइटम एक सदस्यता अनुरोध है जिसकी अभी तक पुष्टि नहीं हुई है। डेटाबेस में ईमेल पता सत्यापित करने के लिए, आपको सही आइटम ढूंढना होगा और confirm
. को बदलना होगा से true
।
जब आप अपने डेटा के साथ काम करते हैं, तो प्रत्येक हेरफेर के लक्ष्य पर विचार करें और आप आने वाले अनुरोध की तुलना मौजूदा डेटा से कैसे कर सकते हैं।
उदाहरण के लिए, यदि किसी ने उसी ईमेल पते के लिए बाद में सदस्यता अनुरोध किया है, तो आप इसे कैसे संभालेंगे?
आप कह सकते हैं, "नए id
के साथ एक नया लाइन आइटम बनाएं ।" हालांकि, यह सबसे अच्छी रणनीति नहीं हो सकती है जब आपके सर्वर रहित एप्लिकेशन डेटाबेस को अनुरोध मात्रा द्वारा भुगतान किया जाता है।
चूंकि DynamoDB मूल्य निर्धारण इस बात पर निर्भर करता है कि आप अपनी टेबल पर कितना डेटा पढ़ते और लिखते हैं, इसलिए अतिरिक्त डेटा पर जमा होने से बचना फायदेमंद है।
इसे ध्यान में रखते हुए, एक नई लाइन जोड़ने के बजाय एक ही ईमेल के लिए सब्सक्रिप्शन अनुरोधों को अपडेट करके संभालना समझदारी होगी।
सिंपल सब्स्क्राइब वास्तव में डेटाबेस आइटम को जोड़ने या अपडेट करने के लिए उसी फ़ंक्शन का उपयोग करता है। इसे आम तौर पर "अपडेट या इंसर्ट" कहा जाता है।
SQLite जैसे डेटाबेस में इसे UPSERT सिंटैक्स के साथ पूरा किया जाता है। DynamoDB के मामले में, आप एक अद्यतन कार्रवाई का उपयोग करते हैं। गो एसडीके के लिए, इसका सिंटैक्स UpdateItem
. है ।
जब एक डुप्लिकेट सदस्यता अनुरोध प्राप्त होता है, तो डेटाबेस आइटम का मिलान email
. पर किया जाता है केवल। यदि कोई मौजूदा पंक्ति वस्तु मिलती है, तो उसका id
और timestamp
ओवरराइड हैं, जो मौजूदा डेटाबेस रिकॉर्ड को अपडेट करते हैं और डुप्लिकेट अनुरोधों के साथ आपकी तालिका में बाढ़ आने से बचाते हैं।
ईमेल पतों को कैसे सत्यापित करें
फॉर्म जमा करने के बाद, इच्छित ग्राहक को एसईएस से एक लिंक वाला एक ईमेल प्राप्त होता है। यह लिंक email
. का उपयोग करके बनाया गया है और id
तालिका से, और प्रारूप लेता है:
<BASE_URL><VERIFY_PATH>/[email protected]&id=uuid-xxxxx
इस सेट अप में, id
एक यूयूआईडी है जो एक गुप्त टोकन के रूप में कार्य करता है। यह एक पहचानकर्ता प्रदान करता है जिसका आप मिलान कर सकते हैं जो पर्याप्त रूप से जटिल और अनुमान लगाने में कठिन है। यह तरीका लोगों को उन ईमेल पतों की सदस्यता लेने से रोकता है जिन पर उनका नियंत्रण नहीं है।
लिंक पर जाकर email
. के साथ आपके सत्यापन समापन बिंदु पर एक अनुरोध भेजा जाता है और id
क्वेरी स्ट्रिंग में।
इस बार, आने वाले दोनों email
. की तुलना करना महत्वपूर्ण है और id
डेटाबेस रिकॉर्ड के लिए मान। यह पुष्टि करता है कि पुष्टिकरण ईमेल का प्राप्तकर्ता अनुरोध शुरू कर रहा है।
सत्यापन समापन बिंदु सुनिश्चित करता है कि ये मान आपके डेटाबेस में किसी आइटम से मेल खाते हैं, फिर confirm
सेट करने के लिए एक और अद्यतन कार्रवाई करता है से true
, और टाइमस्टैम्प को अपडेट करें। आइटम अब इस तरह दिखता है:
पुष्टि करें | id | timestamp | |
---|---|---|---|
[email protected] | सच | uuid-xxxxx | 2020-11-01 00:37:39 |
ईमेल के लिए क्वेरी कैसे करें
अब आप अपनी ईमेल सूची बनाने के लिए अपनी तालिका को क्वेरी कर सकते हैं। आपके ईमेल भेजने के समाधान के आधार पर, आप इसे मैन्युअल रूप से, किसी अन्य लैम्ब्डा के साथ, या कमांड लाइन से भी कर सकते हैं।
चूंकि अनुरोधित सदस्यता के लिए डेटा (जहां confirm
है false
) को पुष्टि की गई सदस्यता के साथ तालिका में संग्रहीत किया जाता है, ईमेल पते भेजने के लिए क्वेरी करते समय इस डेटा को अलग करना महत्वपूर्ण है। आप यह सुनिश्चित करना चाहेंगे कि आप केवल वही ईमेल लौटाएं जहां confirm
true
है ।
अनसब्सक्राइब लिंक कैसे प्रदान करें
ईमेल पते को सत्यापित करने के समान, साधारण सदस्यता email
. का उपयोग करती है और id
फ़ंक्शन के तर्क के रूप में जो किसी ईमेल पते की सदस्यता समाप्त करने के लिए आपकी DynamoDB तालिका से किसी आइटम को हटा देता है।
लोगों को आपकी सूची से खुद को हटाने की अनुमति देने के लिए, आपको अपने द्वारा भेजे जाने वाले प्रत्येक ईमेल में एक URL प्रदान करना होगा जिसमें उनका email
शामिल हो और id
सदस्यता समाप्त समापन बिंदु के लिए एक क्वेरी स्ट्रिंग के रूप में। यह कुछ इस तरह दिखेगा:
<BASE_URL><UNSUBSCRIBE_PATH>/[email protected]&id=uuid-xxxxx
जब लिंक पर क्लिक किया जाता है, तो क्वेरी स्ट्रिंग को अनसब्सक्राइब एंडपॉइंट पर भेज दिया जाता है। अगर दिया गया email
और id
डेटाबेस आइटम से मेल खाता है, वह आइटम हटा दिया जाएगा।
किसी भी मानवीय हस्तक्षेप के बिना, अपने ग्राहकों के लिए अपनी सूची से खुद को स्वचालित रूप से हटाने के लिए एक विधि प्रदान करना, आपको सौंपे गए डेटा को संभालने की दिशा में एक नैतिक और सम्मानजनक दर्शन का हिस्सा है।
अपने डेटा की देखभाल कैसे करें
एक बार जब आप अन्य लोगों के डेटा को स्वीकार करने का निर्णय लेते हैं, तो इसकी देखभाल करना आपकी जिम्मेदारी बन जाती है। यह आपके द्वारा बनाई गई हर चीज पर लागू होता है। सरल सदस्यता के लिए, इसका अर्थ है अपने डेटाबेस की सुरक्षा बनाए रखना, और समय-समय पर अपनी तालिका की छंटाई करना।
ईमेल पतों को बनाए रखने से बचने के लिए जहां confirm
है false
एक निश्चित समय सीमा के बाद, एक नियमित समय पर चलने वाले सफाई कार्य को स्थापित करना एक अच्छा विचार होगा। इसे मैन्युअल रूप से AWS लैम्ब्डा फ़ंक्शन के साथ, या कमांड लाइन का उपयोग करके प्राप्त किया जा सकता है।
साफ करने के लिए, डेटाबेस आइटम ढूंढें जहां confirm
है false
और timestamp
समय में एक विशेष बिंदु से पुराना है। आपके उपयोग के मामले और अनुरोध की मात्रा के आधार पर, जिस आवृत्ति पर आप सफाई करना चुनते हैं वह अलग-अलग होगी।
इसके अलावा आपके उपयोग के मामले के आधार पर, आप अपने डेटा का बैकअप रखना चाह सकते हैं। यदि आप विशेष रूप से डेटा अखंडता के बारे में चिंतित हैं, तो आप डायनेमोडीबी के लिए ऑन-डिमांड बैकअप या पॉइंट-इन-टाइम रिकवरी का पता लगा सकते हैं।
अपना स्वतंत्र सब्सक्राइबर आधार बनाएं
अपनी खुद की ग्राहक सूची बनाना एक सशक्त प्रयास हो सकता है! चाहे आप एक न्यूज़लेटर शुरू करना चाहते हों, नई सामग्री के लिए सूचनाएं भेजना चाहते हों, या अपने काम के इर्द-गिर्द एक समुदाय बनाना चाहते हों, मेरी ओर से आपको ईमेल से अधिक व्यक्तिगत या प्रत्यक्ष कुछ भी नहीं है।
मैं आपको आज ही सिंपल सब्स्क्राइब के साथ अपना सब्सक्राइबर आधार बनाने के लिए प्रोत्साहित करता हूं। मेरे अधिकांश कामों की तरह, यह खुला स्रोत है और आपके व्यक्तिगत उपयोग के लिए मुफ़्त है। GitHub रिपॉजिटरी में कोड में गोता लगाएँ या SimpleSubscribe.org पर और जानें।
अगर आपको यह पोस्ट अच्छी लगी हो तो मुझे जानना अच्छा लगेगा। मेरे साथ उन हज़ारों लोगों से जुड़ें जो मेरे साथ victoria.dev पर सीखते हैं। इस तरह की और परियोजनाओं के लिए आरएसएस के माध्यम से जाएँ या सदस्यता लें।