首先打开文件:?/member/resetpassword.php?这是织梦会员找回密码的核心文件!
在148行有这么一句:?showmsg('对不起,临时密码错误','-1');???看来问题就在这了!?但是怎么引起的呢,别急继续看代码
从125行往下看:
if(isset($key)) $pwdtmp = $key; $sn = md5(trim($pwdtmp)); if($row['pwd'] == $sn) { if($pwd != "") { if($pwd == $pwdok) { $pwdok = md5($pwdok); $sql = "DELETE FROM `dede_pwd_tmp` WHERE `mid` = '$id';"; $db->executenonequery($sql); $sql = "UPDATE `dede_member` SET `pwd` = '$pwdok' WHERE `mid` = '$id';"; if($db->executenonequery($sql)) { showmsg('更改密码成功,请牢记新密码','login.php'); exit; } } } showmsg('对不起,新密码为空或填写不一致','-1'); exit; } showmsg('对不起,临时密码错误','-1'); exit; |
?
这段代码的意思是:?如果?row['pwd'?等于?$sn?,?则修改密码成功,?如果不等于?就提示:“对不起,临时密码错误”
看来问题出在$pwdtmp?这个字段上,?这个字段值来自前台resetpassword2.htm:
??
|
代码看到这也许有人就晕了,?又出了一个字段:$key,?这段代码的意思是:如果key为空?显示:?
?
看来根源问题就是$key,?key值是系统发送给会员邮件的一个字段,打开文件:/member/inc/inc_pwd_functions.php?找到:
function newmail($mid,$userid,$mailto,$type,$send)
{
??? global $db,$cfg_adminemail,$cfg_webname,$cfg_basehost,$cfg_memberurl;
??? $mailtime = time();
??? $randval = random(8);
??? $mailtitle = $cfg_webname.":密码修改";
??? $mailto = $mailto;
??? $headers = "From: ".$cfg_adminemail."rnReply-To: $cfg_adminemail";
??? $mailbody = "亲爱的".$userid.":rn您好!感谢您使用".$cfg_webname."网。rn".$cfg_webname."应您的要求,重新设置密码:(注:如果您没有提出申请,请检查您的信息是否泄漏。)rn本次临时登陆密码为:".$randval."?请于三天内登陆下面网址确认修改。rn".$cfg_basehost.$cfg_memberurl."/resetpassword.php?dopost=getpasswd&id=".$mid."&key=".$randval;
用红字标注的地方原文件是没有的,?也就是没用传递key值,需要加上&key=".$randval,问题就解决了,到此会员就可以通过邮件找回密码了!