सबसे पहले, हमें यह जानना होगा कि आप पहले से ही उपयोगकर्ता के बारे में क्या जानते हैं। जाहिर है, आपके पास एक उपयोगकर्ता नाम और एक पुराना पासवर्ड है। और क्या जानते हो? क्या आपका ई - मेल एड्रेस है? क्या आपके पास उपयोगकर्ता के पसंदीदा फूल के बारे में डेटा है?
यह मानते हुए कि आपके पास एक उपयोगकर्ता नाम, पासवर्ड और काम करने का ईमेल पता है, आपको अपनी उपयोगकर्ता तालिका में दो फ़ील्ड जोड़ने की आवश्यकता है (यह मानते हुए कि यह एक डेटाबेस तालिका है): new_passwd_expire नामक एक तारीख और एक स्ट्रिंग new_passwd_id।
यह मानते हुए कि आपके पास उपयोगकर्ता का ईमेल पता है, जब कोई व्यक्ति पासवर्ड रीसेट करने का अनुरोध करता है, तो आप उपयोगकर्ता तालिका को निम्नानुसार अपडेट करते हैं:
new_passwd_expire = now() + some number of days
new_passwd_id = some random string of characters (see below)
इसके बाद, आप उस पते पर उपयोगकर्ता को एक ईमेल भेजते हैं:
प्रिय-तो-और
किसी व्यक्ति ने उपयोगकर्ता खाते के लिए एक नया पासवर्ड का अनुरोध किया है <यूज़र> <अपनी वेबसाइट का नाम>। यदि आपने इस पासवर्ड रीसेट का अनुरोध किया है, तो इस लिंक का अनुसरण करें:
http://example.com/yourscript.lang?update= < new_password_id >
यदि वह लिंक काम नहीं करता है तो आप http://example.com/yourscript.lang पर जा सकते हैं और फॉर्म में निम्नलिखित दर्ज कर सकते हैं : <new_password_id>
यदि आपने पासवर्ड रीसेट का अनुरोध नहीं किया है, तो आप इस ईमेल को अनदेखा कर सकते हैं।
धन्यवाद, यदा यदा
अब, कोडिंग yourcript.lang: इस स्क्रिप्ट को एक फॉर्म की आवश्यकता है। यदि संस्करण अद्यतन URL पर पारित हो गया है, तो फ़ॉर्म केवल उपयोगकर्ता के उपयोगकर्ता नाम और ईमेल पते के लिए पूछता है। यदि अपडेट पारित नहीं हुआ है, तो यह उपयोगकर्ता नाम, ईमेल पता और ईमेल में भेजा गया आईडी कोड पूछता है। आप एक नया पासवर्ड (दो बार) भी मांगते हैं।
उपयोगकर्ता के नए पासवर्ड को सत्यापित करने के लिए, आप उपयोगकर्ता नाम, ईमेल पता, और आईडी कोड सभी मिलान सत्यापित करते हैं, कि अनुरोध समाप्त नहीं हुआ है, और यह कि दो नए पासवर्ड मेल खाते हैं। सफल होने पर, आप उपयोगकर्ता के पासवर्ड को नए पासवर्ड में बदलते हैं और उपयोगकर्ता तालिका से पासवर्ड रीसेट फ़ील्ड साफ़ करते हैं। साथ ही उपयोगकर्ता को लॉग आउट करना / किसी भी लॉगिन से संबंधित कुकीज़ को साफ़ करना सुनिश्चित करें और उपयोगकर्ता को लॉगिन पृष्ठ पर पुनः निर्देशित करें।
अनिवार्य रूप से, new_passwd_id फ़ील्ड एक पासवर्ड है जो केवल पासवर्ड रीसेट पेज पर काम करता है।
एक संभावित सुधार: आप ईमेल से <username> निकाल सकते हैं। "किसी ने इस ईमेल पते पर एक खाते के लिए एक पासवर्ड रीसेट का अनुरोध किया है ...." इस प्रकार उपयोगकर्ता कुछ बनाता है केवल उपयोगकर्ता जानता है कि क्या ईमेल अवरोधन है। मैंने इस तरह से शुरुआत नहीं की क्योंकि अगर कोई खाता पर हमला कर रहा है, तो वे पहले से ही उपयोगकर्ता नाम जानते हैं। यह जोड़ा अस्पष्टता मानव-में-बीच के अवसरों के हमलों को रोकती है, जब कोई दुर्भावनापूर्ण ईमेल को बाधित करने के लिए होता है।
अपने प्रश्नों के लिए:
रैंडम स्ट्रिंग जनरेट करना: यह बेहद रैंडम होने की जरूरत नहीं है। कोई भी GUID जनरेटर या यहां तक कि md5 (कंकट (नमक, current_timestamp ())) पर्याप्त है, जहां उपयोगकर्ता के रिकॉर्ड पर नमक कुछ ऐसा है जैसे टाइमस्टैम्प खाता बनाया गया था। यह कुछ ऐसा है जो उपयोगकर्ता नहीं देख सकता है।
टाइमर: हाँ, आपको अपने डेटाबेस को सुरक्षित रखने के लिए इसकी आवश्यकता है। एक सप्ताह से अधिक वास्तव में आवश्यक नहीं है, लेकिन कम से कम 2 दिन के बाद से आप कभी नहीं जानते कि ईमेल में देरी कितनी देर तक हो सकती है।
आईपी एड्रेस: चूंकि ईमेल को दिनों तक देरी हो सकती है, आईपी एड्रेस केवल लॉगिंग के लिए उपयोगी है, सत्यापन के लिए नहीं। यदि आप इसे लॉग इन करना चाहते हैं, तो ऐसा करें, अन्यथा आपको इसकी आवश्यकता नहीं है।
स्क्रीन रीसेट करें: ऊपर देखें।
आशा है कि इसे कवर करता है। सौभाग्य।