Öncelikle, kullanıcı hakkında zaten bildiklerinizi bilmemiz gerekir. Açıkçası, bir kullanıcı adınız ve eski bir şifreniz var. Başka ne biliyorsun? Mail adresin var mı? Kullanıcının en sevdiği çiçekle ilgili verileriniz var mı?
Bir kullanıcı adınız, şifreniz ve çalışan bir e-posta adresiniz olduğunu varsayarak, kullanıcı tablonuza iki alan eklemeniz gerekir (bunun bir veritabanı tablosu olduğu varsayılarak): new_passwd_expire adlı bir tarih ve new_passwd_id dizesi.
Kullanıcının e-posta adresine sahip olduğunuzu varsayarsak, birisi şifre sıfırlama istediğinde kullanıcı tablosunu aşağıdaki şekilde güncellersiniz:
new_passwd_expire = now() + some number of days
new_passwd_id = some random string of characters (see below)
Ardından, kullanıcıya bu adresten bir e-posta gönderirsiniz:
Sevgili falan
Birisi <web sitenizin adı> adresindeki <kullanıcı adı> kullanıcı hesabı için yeni bir şifre istedi. Bu şifre sıfırlamayı talep ettiyseniz, şu bağlantıyı izleyin:
http://example.com/yourscript.lang?update=<new_password_id >
Bu bağlantı çalışmazsa, http://example.com/yourscript.lang adresine gidebilir ve şu forma şunu girebilirsiniz: <new_password_id>
Parola sıfırlama talebinde bulunmadıysanız, bu e-postayı göz ardı edebilirsiniz.
Teşekkürler yada yada
Şimdi, yourscript.lang kodlama: Bu komut dosyasının bir forma ihtiyacı var. Değişken güncellemesi URL'ye aktarılırsa, formda yalnızca kullanıcının kullanıcı adı ve e-posta adresi istenir. Güncelleme geçilmezse, kullanıcı adı, e-posta adresi ve e-postayla gönderilen kimlik kodunu ister. Ayrıca yeni bir şifre de istersiniz (tabii ki iki kez).
Kullanıcının yeni şifresini doğrulamak için, kullanıcı adı, e-posta adresi ve kimlik kodunun tamamen eşleştiğini, isteğin süresinin dolmadığını ve iki yeni şifrenin eşleştiğini doğrularsınız. Başarılı olursa, kullanıcının parolasını yeni parolayla değiştirirsiniz ve parola sıfırlama alanlarını kullanıcı tablosundan temizlersiniz. Ayrıca kullanıcının oturumunu kapattığınızdan / oturum açma ile ilgili tüm çerezleri temizlediğinizden ve kullanıcıyı oturum açma sayfasına yönlendirdiğinizden emin olun.
Esasen, new_passwd_id alanı yalnızca parola sıfırlama sayfasında çalışan bir paroladır.
Olası bir iyileştirme: e-postadan <kullanıcı adı> 'nı kaldırabilirsiniz. "Birisi bu e-posta adresindeki bir hesap için şifre sıfırlama talebinde bulundu ...." Böylece kullanıcı adı, e-postanın ele geçirilmesi durumunda yalnızca kullanıcının bildiği bir şey haline gelir. Bu şekilde başlamadım çünkü birisi hesaba saldırıyorsa kullanıcı adını zaten biliyordur. Bu ek belirsizlik, kötü niyetli birinin e-postayı ele geçirmesi durumunda ortadaki adam fırsatlarını durdurur.
Sorularınıza gelince:
rastgele dizge oluşturmak: Son derece rastgele olması gerekmez. Herhangi bir GUID oluşturucu veya hatta md5 (concat (salt, current_timestamp ())) yeterlidir, burada salt, zaman damgası hesabı oluşturulmuş gibi kullanıcı kaydındaki bir şeydir. Kullanıcının göremeyeceği bir şey olmalı.
timer: Evet, veritabanınızı aklı başında tutmak için buna ihtiyacınız var. Bir haftadan fazla bir süre gerçekten gerekli değildir, ancak bir e-posta gecikmesinin ne kadar süreceğini asla bilemediğiniz için en az 2 gün.
IP Adresi: E-posta günlerce gecikebileceğinden, IP adresi doğrulama için değil, yalnızca oturum açmak için yararlıdır. Günlüğe kaydetmek istiyorsanız, bunu yapın, aksi takdirde ihtiyacınız olmaz.
Ekranı Sıfırla: Yukarıya bakın.
Umarım kapsar. İyi şanslar.