i have some few ideas to share...
For me the best solution is.
ASK FOR A SECRET QUESTIOn....
1.1 Ask for the secret answer or the e-mail.
1.2 Check if the secret answer supplied is correct
1.3 If not correct, then deny any request.
1.4 IF correct, generate a random password ( store it as hash
value), disable the account to deny any login attempt.
1.5 Send thru e-mail (based on user profile), the newly generated
password and the URL "enable code".
1.6 The user must visit the URL to enable the account and
type-in the generated code + new password + confirm new
password.
If the e-mail (ref. to 1.1) was provided instead of the secret
answer:
- determine the owner of the e-mail address (1 is to 1 for
user_id and e-mail)
- proceed to step 1.4
cheers!