मैंने अब तक जितनी भी प्रोजेक्ट योजनाएँ लिखी हैं, उनमें से हर एक में एक आइटम होता है: "प्रमाणीकरण — 2 दिन।"
हर प्रोजेक्ट रेट्रोस्पेक्टिव में एक नोट होता है: "Auth में 2 सप्ताह लग गए।"
मैंने अब तक 4 बार auth सिस्टम बनाए हैं। हर बार, मैं इसे कम आंकता हूँ। यहाँ बताया गया है कि क्यों, और आखिरकार मैंने क्या सीखा।
हिमशैल (The Iceberg)
आपको क्या लगता है auth है:
- लॉगिन फ़ॉर्म
- एक टोकन स्टोर करें
- जाँचें कि टोकन वैध है या नहीं
- हो गया
auth वास्तव में क्या है:
- लॉगिन फ़ॉर्म (ईमेल/पासवर्ड + OAuth + मैजिक लिंक + MFA?)
- पासवर्ड हैशिंग (bcrypt, argon2, क्या कॉस्ट फ़ैक्टर?)
- सत्र प्रबंधन (JWT बनाम सत्र कुकी बनाम दोनों?)
- टोकन रिफ्रेश (साइलेंट रिफ्रेश, रोटेशन, रिवोकेशन)
- CSRF सुरक्षा (समान-साइट कुकीज़, डबल-सबमिट टोकन)
- रेट लिमिटिंग (लॉगिन पर, रजिस्ट्रेशन पर, पासवर्ड रीसेट पर)
- पासवर्ड रीसेट फ़्लो (टोकन जनरेशन, समाप्ति, एकल-उपयोग)
- ईमेल सत्यापन (टोकन, पुनः भेजने का तर्क, यदि वे ईमेल बदलते हैं तो क्या?)
- खाता लॉकआउट (कितने प्रयास? अनलॉक फ़्लो क्या है?)
- भूमिका-आधारित पहुँच (एडमिन बनाम उपयोगकर्ता बनाम मॉडरेटर)
- API कुंजी प्रबंधन (प्रोग्रामेटिक एक्सेस के लिए)
- पासवर्ड बदलने पर सत्र अमान्यकरण
- "मुझे याद रखें" बनाम "केवल यह सत्र"
- नए डिवाइस से लॉगिन सूचना
- ऑडिट लॉगिंग (किसने लॉगिन किया, कब, कहाँ से)
ये 15+ सुविधाएँ हैं। प्रत्येक में 1-2 दिन लगते हैं, तो आप एक महीने की बात कर रहे हैं।
अब मैं क्या करता हूँ: Supabase Auth का उपयोग करें और विस्तारित करें
दो बार कस्टम auth बनाने और दोनों बार अपने जीवन से नफरत करने के बाद, अब मैं Supabase Auth (या Clerk, या Auth.js) से शुरू करता हूँ। यह संभालता है:
- bcrypt के साथ ईमेल/पासवर्ड
- OAuth प्रदाता (Google, GitHub, Discord)
- रिफ्रेश के साथ JWT टोकन
- ईमेल सत्यापन
- पासवर्ड रीसेट
- सत्र प्रबंधन
- रेट लिमिटिंग
यह auth का 80% है, जो उन लोगों द्वारा संभाला जाता है जो पूरे समय auth के बारे में सोचते हैं। मैं उस 20% पर ध्यान केंद्रित करता हूँ जो मेरे ऐप के लिए विशिष्ट है:
\\
