Skip to content
Engineering

ईमेल साइन इन फ्लो: टेस्टिंग और डिबगिंग कैसे करें

| | 11 मिनट पढ़ें
Email Sign In Flows: How to Test and Debug
Email Sign In Flows: How to Test and Debug

ईमेल-आधारित साइन इन इंसानों के लिए धोखे से सरल लगता है और ऑटोमेशन के लिए कुख्यात रूप से अस्थिर है। एक यूजर “मुझे कोड भेजें” पर क्लिक करता है, एक ईमेल आता है, वे OTP पेस्ट करते हैं या मैजिक लिंक पर टैप करते हैं, और वे अंदर हैं। QA सूट्स, CI पाइपलाइन और LLM एजेंट्स के लिए, वही फ्लो एक डिस्ट्रिब्यूटेड सिस्टम प्रॉब्लम में बदल जाता है: एसिंक्रोनस डिलीवरी, टेम्प्लेटिंग ड्रिफ्ट, रेट लिमिट्स, लिंक रीराइटिंग, और एनवायरनमेंट्स में स्टेट मिसमैचेज।

यह गाइड ईमेल साइन इन फ्लो को कैसे टेस्ट और डिबग करें पर फोकस करता है जो डिटर्मिनिस्टिक, ऑब्जर्वेबल और ऑटोमेशन-फ्रेंडली हो, खासकर जब आप एजेंटिक सिस्टम बना रहे हों जिन्हें विश्वसनीय तरीके से ऑथेंटिकेट करना होता है।

“ईमेल साइन इन” का मतलब क्या है (और क्या टेस्ट करें)

अधिकांश प्रोडक्ट्स इनमें से एक या अधिक पैटर्न लागू करते हैं:

  • ईमेल OTP साइन इन: सर्वर एक शॉर्ट-लिव्ड कोड ईमेल करता है जिसे यूजर एंटर करता है।
  • मैजिक लिंक साइन इन: सर्वर एक वन-क्लिक लिंक ईमेल करता है जिसमें टोकन होता है।
  • साइनअप वेरिफिकेशन: यूजर अकाउंट बनाता है, फिर एक्टिवेट करने के लिए ईमेल वेरिफाई करना होता है।
  • स्टेप-अप वेरिफिकेशन: संवेदनशील एक्शन्स (डेटा एक्सपोर्ट, पासवर्ड चेंज) के लिए ईमेल चैलेंज।

भले ही आपका UI केवल एक स्क्रीन दिखाए, आपका टेस्ट फ्लो को स्टेट मशीन के रूप में मॉडल करना चाहिए:

  • चैलेंज रिक्वेस्ट करें (OTP या लिंक)
  • टोकन जेनरेट करें और स्टोर करें (TTL, अटेम्प्ट काउंट और आइडेंटिफायर के साथ बाइंडिंग)
  • प्रोवाइडर के जरिए ईमेल भेजें
  • ईमेल रिसीव करें
  • क्रेडेंशियल एक्सट्रैक्ट करें (कोड या लिंक)
  • क्रेडेंशियल रिडीम करें
  • सेशन एस्टैब्लिश करें

जब टेस्ट्स फ्लेक होते हैं, आमतौर पर इसलिए कि आप टाइमिंग या कंटेंट के बारे में कुछ मान रहे हैं जिसकी गारंटी नहीं है।

फेलियर मोड्स जो फ्लेकी साइन इन टेस्ट्स का कारण बनते हैं

ईमेल साइन इन बग्स कुछ दोहराए जाने वाली कैटेगरीज में क्लस्टर होते हैं। यदि आप सिम्प्टम्स को संभावित कारणों से मैप करते हैं, तो डिबगिंग बहुत तेज हो जाती है।

टेस्ट में सिम्प्टम संभावित कारण लॉग्स/टेलीमेट्री में क्या कैप्चर करें
“कोई ईमेल नहीं मिला” प्रोवाइडर देरी, स्पैम फिल्टरिंग, गलत रिसिपिएंट, एनवायरनमेंट मिसकॉन्फिग message-id, प्रोवाइडर रिस्पॉन्स, रिसिपिएंट, एनवायरनमेंट, सेंड टाइमस्टैम्प
ईमेल आया, लेकिन पार्सिंग फेल हुई टेम्प्लेट बदल गया, मल्टीपार्ट-ओनली HTML, एन्कोडिंग रॉ हेडर्स, text/plain बॉडी, HTML बॉडी, charset
OTP एक्सट्रैक्ट हुआ, लेकिन रिडीम फेल गलत टोकन यूजर से बाउंड, एक्सपायर्ड टोकन, रीयूज्ड टोकन टोकन TTL, अटेम्प्ट काउंट, यूजर id, टोकन हैश, सर्वर टाइम
मैजिक लिंक क्लिक हुआ, लेकिन सेशन एस्टैब्लिश नहीं कुकी इश्यूज़, रीडायरेक्ट चेन, CSRF या स्टेट मिसमैच रीडायरेक्ट URLs, स्टेटस कोड्स, कुकी जार, स्टेट पैराम
केवल CI में इंटरमिटेंट फेलियर्स कॉन्करेंसी कॉलिजन्स, शेयर्ड इनबॉक्स, पैरेलल टेस्ट्स प्रति रन कोरिलेशन ID, इनबॉक्स आइसोलेशन, idempotency keys
केवल प्रोडक्शन-लाइक env में फेल लिंक रीराइटिंग, ट्रैकिंग पैराम्स, कॉर्पोरेट ईमेल गेटवे फाइनल रिजॉल्व्ड URL, क्वेरी पैराम्स, रिस्पॉन्स हेडर्स

की बात यह है कि ईमेल डिलीवरी और कंटेंट को inputs you must observe के रूप में ट्रीट करें, assumptions के रूप में नहीं।

ईमेल साइन इन फ्लो के लिए डिटर्मिनिस्टिक टेस्ट हार्नेस

एक विश्वसनीय हार्नेस की दो प्रॉपर्टीज होती हैं:

  1. इनबॉक्स आइसोलेशन: प्रति टेस्ट रन एक इनबॉक्स (या पैरेललिज्म के लिए प्रति टेस्ट केस)।
  2. कोरिलेशन: हर ईमेल को उस सटीक रन से मैच किया जा सकता है जिसने इसे ट्रिगर किया।

एक प्रैक्टिकल अप्रोच यह है:

  • रन के लिए एक फ्रेश, डिस्पोजेबल इनबॉक्स बनाएं।
  • उस इनबॉक्स एड्रेस का उपयोग करके साइन इन चैलेंज ट्रिगर करें।
  • ईमेल का इंतजार करें (वेबहुक स्पीड के लिए बेस्ट है, पोलिंग अच्छा फॉलबैक है)।
  • स्ट्रक्चर्ड फील्ड्स (subject, from, receivedAt) पर असर्ट करें और कोड/लिंक पार्स करें।
  • कोड/लिंक रिडीम करें और सेशन स्टेट असर्ट करें।

यदि आप AI एजेंट्स बना रहे हैं जिन्हें वर्कफ्लो के हिस्से के रूप में सर्विसेज में ऑथेंटिकेट करना होता है, वही हार्नेस एक “ईमेल टूल” बन जाता है जिसे आपका एजेंट कॉल कर सकता है। यह एजेंटिक प्रोडक्ट्स में रेलेवेंट है, QA एजेंट्स से आउटबाउंड ऑटोमेशन तक, और यहां तक कि LinkedIn outreach के लिए AI SDR जैसे टूल्स जो स्केल पर ऑपरेट करने के लिए विश्वसनीय, प्रोग्रामेटिक इंटरेक्शन्स पर निर्भर करते हैं।

अपने आउटबाउंड ईमेल में कोरिलेशन जोड़ें

आइसोलेटेड इनबॉक्स के साथ भी, आप एक डिटर्मिनिस्टिक तरीका चाहते हैं जो ईमेल को ट्रिगर से मैच करे। अच्छी कोरिलेशन तकनीकें:

  • सब्जेक्ट में रन ID एम्बेड करें (उदाहरण: Your login code (run: 2f3a...))।
  • कस्टम हेडर जोड़ें जैसे X-Test-Run-Id यदि आपका प्रोवाइडर इसे सपोर्ट करता है।
  • मैजिक लिंक्स के लिए रीडायरेक्ट URL में nonce शामिल करें (उदाहरण: state=...)।

कोरिलेशन वह चीज है जो पैरेलल CI में “सही ईमेल, गलत टेस्ट” फेलियर्स को रोकती है।

HTML नहीं, text/plain पार्स करना प्राथमिकता दें

HTML टेम्प्लेट्स अक्सर बदलते हैं और फ्रेजाइल स्ट्रक्चर से भरे होते हैं। OTP के लिए, सुनिश्चित करें कि आपके ईमेल में एक स्टेबल text/plain पार्ट है और पहले उसे पार्स करें।

मैजिक लिंक्स के लिए, “पहला एंकर टैग” पर निर्भर न रहें। बल्कि, एक URL पैटर्न मैच करें जिसे आप कंट्रोल करते हैं (होस्ट + पाथ), फिर आवश्यक क्वेरी पैराम्स को वैलिडेट करें।

एंड-टू-एंड डिबगिंग प्लेबुक (तेज और व्यवस्थित)

जब टेस्ट फेल हो, तुरंत रीरन करने की इच्छा का विरोध करें। पहले, पूरे फ्लो में एक सिंगल ट्रेस कलेक्ट करें।

1) प्रूव करें कि सर्वर ने वह चैलेंज जेनरेट किया जो आप सोचते हैं

“send code/link” पर लॉग करें:

  • यूजर आइडेंटिफायर (ईमेल)
  • टोकन हैश (कभी रॉ टोकन नहीं)
  • एक्सपायरी टाइमस्टैम्प
  • रिक्वेस्ट id / ट्रेस id
  • एनवायरनमेंट

यदि आप ट्रेस id द्वारा “send challenge” को “redeem challenge” से कनेक्ट नहीं कर सकते, तो आप ब्लाइंड डिबग कर रहे हैं।

2) प्रूव करें कि ईमेल वास्तव में भेजा गया (और किसे)

ईमेल प्रोवाइडर रिस्पॉन्स (accepted, rejected, queued) कैप्चर करें, साथ ही message-id यदि उपलब्ध हो। आश्चर्यजनक संख्या में फेलियर्स “गलत एड्रेस पर भेजा गया” होता है जो इनके कारण होता है:

  • trimming/normalization बग्स
  • टेस्ट डेटा डुप्लिकेट्स जेनरेट कर रहा है
  • स्टेल एनवायरनमेंट वेरिएबल्स
  • पैरेलल टेस्ट्स में शेयर्ड इनबॉक्स का उपयोग

3) प्रूव करें कि यूजर क्या देखेगा

डिलीवर्ड ईमेल फेच करें और स्टोर करें:

  • हेडर्स (खासकर To, From, Subject, Date, Message-ID)
  • एक नॉर्मलाइज्ड टेक्स्ट बॉडी
  • एक्सट्रैक्टेड OTP या लिंक

यदि आपकी पाइपलाइन केवल “email received: true” स्टोर करती है, तो आप घंटों अनुमान लगाने में बिताएंगे।

4) रिडीम रिक्वेस्ट को सटीक रूप से वैलिडेट करें

OTP के लिए, वेरिफाई करें:

  • आप समान ईमेल आइडेंटिटी के अगेंस्ट रिडीम कर रहे हैं
  • आप पिछली रिक्वेस्ट के साथ रेसिंग नहीं कर रहे (नया टोकन पुराना टोकन इनवैलिडेट करता है)
  • सर्विसेज के बीच क्लॉक स्क्यू अनपेक्षित रूप से TTL को छोटा नहीं कर रहा

मैजिक लिंक्स के लिए, वेरिफाई करें:

  • रीडायरेक्ट्स के बाद फाइनल रिजॉल्व्ड URL
  • सही डोमेन पर सेट कुकीज
  • state/nonce मैच करता है जो आपने इश्यू किया था

5) टाइमआउट्स जोड़ें जो रियलिटी से मैच करें, फिर मेजर करें

ईमेल एसिंक्रोनस है। अपने हार्नेस को एक्सप्लिसिट वेटिंग के आसपास डिजाइन करें:

  • एक छोटी “fast path” विंडो (अधिकांश ईमेल्स के लिए)
  • एक लंबी “slow path” सीलिंग (प्रोवाइडर देरी के लिए)

फिर वास्तविक लेटेंसी डिस्ट्रिब्यूशन रिकॉर्ड करें ताकि आप डेटा के आधार पर टाइमआउट्स सेट कर सकें, vibes के आधार पर नहीं।

एक ईमेल साइन इन टेस्ट हार्नेस का सिंपल सीक्वेंस डायग्राम: टेस्ट रनर एक डिस्पोजेबल इनबॉक्स बनाता है, साइन इन ट्रिगर करता है, वेबहुक का इंतजार करता है या ईमेल JSON के लिए पोल करता है, OTP या मैजिक लिंक एक्सट्रैक्ट करता है, इसे ऐप के अगेंस्ट रिडीम करता है, और ऑथेंटिकेटेड सेशन असर्ट करता है।

मैजिक लिंक्स टेस्ट करना: पिटफॉल्स जिनकी आप उम्मीद कर सकते हैं

मैजिक लिंक्स महान UX हैं और OTP से थोड़े कठिन टेस्ट करने के लिए।

सामान्य पिटफॉल्स:

  • लिंक स्कैनर्स टोकन कंज्यूम करते हैं: सिक्योरिटी गेटवे या प्रीव्यू बॉट्स लिंक्स को “क्लिक” कर सकते हैं। मिटिगेशन: टोकन्स को सिंगल-यूज बनाएं लेकिन तब तक इनवैलिडेट न करें जब तक कि वास्तविक ब्राउज़र सेशन एक छोटा कन्फर्मेशन स्टेप पूरा न करे, या रिडेम्प्शन को अतिरिक्त सिग्नल्स से बाइंड करें।
  • रीडायरेक्ट चेन्स: ट्रैकिंग पैरामीटर्स, HTTP से HTTPS रीडायरेक्ट्स, या ऐप डोमेन्स के बीच स्विचिंग।
  • क्रॉस-डोमेन कुकीज: आपकी फाइनल सेशन कुकी एक अलग डोमेन पर सेट हो सकती है जिसकी आपका टेस्ट क्लाइंट उम्मीद करता है।

एक रोबस्ट टेस्ट मैजिक लिंक को एक रियल ब्राउज़र की तरह ट्रीट करता है: रीडायरेक्ट्स फॉलो करें, कुकीज परसिस्ट करें, और फाइनल लैंडिंग पेज स्टेट असर्ट करें।

OTP कोड्स टेस्ट करना: एक्सट्रैक्शन को बोरिंग और स्टेबल बनाएं

OTP फेलियर्स अक्सर पार्सिंग फेलियर्स होती हैं।

सिफारिशें:

  • OTP को टेक्स्ट बॉडी में प्रेडिक्टेबल फॉर्मेट में रखें (उदाहरण: Your code is: 123456)।
  • एक स्ट्रिक्ट regex का उपयोग करें जो केवल OTP लाइन को मैच करे, किसी अन्य नंबर (तारीखें, टिकट IDs) को नहीं।
  • OTP को स्ट्रिंग के रूप में ट्रीट करके लीडिंग जीरो हैंडल करें।

यदि आपका OTP 6 डिजिट का है, लेकिन आपके ईमेल में फोन नंबर या ऑर्डर IDs हैं, तो naive regex पैटर्न अंततः गलत नंबर एक्सट्रैक्ट करेंगे।

CI में साइन इन टेस्ट्स को विश्वसनीय बनाना (खासकर कॉन्करेंसी के अंतर्गत)

CI रेस कंडिशन्स को एक्सपोज करता है जो कभी लोकली दिखाई नहीं देतीं।

पैरेललिज्म के लिए डिजाइन करें:

  • प्रति टेस्ट रन एक इनबॉक्स: जॉब्स में एड्रेस शेयर न करें।
  • Idempotent send challenge: रिट्राई को अस्पष्ट स्टेट जेनरेट नहीं करना चाहिए।
  • डिटर्मिनिस्टिक इनवैलिडेशन रूल्स: यदि दूसरी OTP रिक्वेस्ट पहली को इनवैलिडेट करती है, तो आपके टेस्ट को एक बार रिक्वेस्ट करना चाहिए या रिप्लेसमेंट को एक्सप्लिसिटली हैंडल करना चाहिए।

इसके अलावा, रिट्राई को सिग्नल के रूप में ट्रीट करें, समाधान के रूप में नहीं। यदि आपका सूट “रीरन पर पास” करता है, तो आपके पास अभी भी प्रोडक्शन रिलायबिलिटी इश्यू है।

ईमेल साइन इन फ्लो को टेस्ट और डिबग करने के लिए Mailhook का उपयोग

Mailhook ऑटोमेशन और एजेंट वर्कफ्लो में प्रोग्रामेबल ईमेल हैंडलिंग के लिए डिजाइन किया गया है: आप API के जरिए डिस्पोजेबल इनबॉक्स बना सकते हैं, फिर ईमेल को स्ट्रक्चर्ड JSON के रूप में रिसीव कर सकते हैं। यह वेबमेल UI को स्क्रीन-स्क्रेपिंग के बिना हेडर्स और बॉडीज पर स्टेबल असर्शन्स बनाना व्यावहारिक बनाता है।

कैपेबिलिटीज जो विशेष रूप से साइन इन टेस्टिंग के लिए मायने रखती हैं:

  • API के जरिए डिस्पोजेबल इनबॉक्स क्रिएशन रन्स को आइसोलेट करने और क्रॉस-टेस्ट कॉलिजन्स से बचने के लिए।
  • JSON के रूप में ईमेल डिलीवरी ताकि आपका हार्नेस OTPs और लिंक्स को डिटर्मिनिस्टिकली एक्सट्रैक्ट कर सके।
  • रियल-टाइम वेबहुक नोटिफिकेशन्स लो-लेटेंसी टेस्ट्स के लिए, साथ ही पोलिंग फॉलबैक के रूप में।
  • साइन्ड पेलोड्स ताकि आपका वेबहुक कंज्यूमर ऑथेंटिसिटी वेरिफाई कर सके।
  • बैच प्रोसेसिंग हाई-वॉल्यूम सूट्स या एजेंट पाइपलाइन्स के लिए।
  • शेयर्ड डोमेन्स तेज़ शुरुआत के लिए, और कस्टम डोमेन सपोर्ट जब आपको टाइटर डोमेन कंट्रोल की जरूरत हो।

Mailhook के व्यवहार और कंस्ट्रेंट्स के सबसे अप-टू-डेट, मशीन-रीडेबल विवरण के लिए, प्रोजेक्ट के llms.txt को रेफरेंस करें।

एक प्रैक्टिकल पैटर्न: स्ट्रक्चर्ड असर्शन्स के साथ “प्रति रन एक इनबॉक्स”

CI के लिए एक क्लीन पैटर्न इस तरह दिखता है:

  • टेस्ट स्टार्ट पर run_id जेनरेट करें।
  • इनबॉक्स बनाएं, inbox_id और ईमेल एड्रेस स्टोर करें।
  • उस एड्रेस के लिए अपने ऐप का “send sign in email” ट्रिगर करें।
  • पहले ईमेल का इंतजार करें जहां सब्जेक्ट या बॉडी में run_id शामिल है।
  • इनवैरिएंट्स असर्ट करें (सेंडर डोमेन, सब्जेक्ट प्रीफिक्स, आवश्यक हेडर्स)।
  • OTP या लिंक एक्सट्रैक्ट करें, इसे रिडीम करें, फिर ऑथेंटिकेटेड स्टेट असर्ट करें।

यह आपके साइन इन फ्लो के “ईमेल पार्ट” को ऑब्जर्वेबल और रीप्लेएबल रखता है, जो कुछ बदलने पर डिबग करने का सबसे तेज़ तरीका है।

सिक्योरिटी और हाइजीन: ईमेल को अंट्रस्टेड इनपुट के रूप में ट्रीट करें (टेस्ट्स में भी)

ईमेल एक सामान्य अटैक सर्फेस है, और टेस्ट इन्फ्रास्ट्रक्चर प्रोडक्शन-लाइक कॉन्टेक्स्ट में रीयूज होता रहता है।

कुछ नियम जो सरप्राइजेस को रोकते हैं:

  • ईमेल से HTML या स्क्रिप्ट्स एक्जीक्यूट न करें। कंटेंट को डेटा के रूप में पार्स करें।
  • URL फॉलो करने से पहले मैजिक-लिंक होस्ट और पाथ को वैलिडेट करें और allowlist करें।
  • केवल वह स्टोर करें जिसकी डिबगिंग के लिए जरूरत है, और ईमेल कंटेंट की रिटेंशन को मिनिमाइज करें।
  • एक्सीडेंटल क्रॉस-एनवायरनमेंट साइन इन्स से बचने के लिए टेस्ट डोमेन्स और प्रोडक्शन डोमेन्स को अलग रखें।

निष्कर्ष: ईमेल साइन इन को बोरिंग बनाएं

आपका लक्ष्य सिर्फ “टेस्ट पास” नहीं है। आपका लक्ष्य फेलियर्स को मिनटों में डायग्नोसेबल बनाना है:

  • इनबॉक्स आइसोलेट करें
  • कोरिलेशन IDs जोड़ें
  • चैलेंज लाइफसाइकिल लॉग करें
  • सटीक डिलीवर्ड मैसेज कैप्चर करें
  • रियल क्लाइंट की तरह रिडीम करें

एक बार जब आप यह कर लेते हैं, तो ईमेल साइन इन QA ऑटोमेशन और LLM एजेंट्स के लिए एक स्टेबल बिल्डिंग ब्लॉक बन जाता है जिन्हें टूलचेन के हिस्से के रूप में ऑथेंटिकेट करना होता है।

यदि आप एक प्रोग्रामेबल इनबॉक्स चाहते हैं जो इस वर्कफ्लो में फिट हो, तो आप Mailhook के साथ mailhook.co पर शुरुआत कर सकते हैं और कैनॉनिकल फीचर रेफरेंस के रूप में llms.txt को हैंडी रख सकते हैं।

email-testing authentication qa-automation debugging ci-cd

संबंधित लेख