DedeCMS会员通过邮箱找回密码的完善解决办法

首先打开文件:/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:

<?php
if(empty($key)){ ?>

                <li><span>临时验证码:</span>

                    <input name=
‘pwdtmp’ type=
“password”/>

                </li>

                <?php }
else{ ?>

                <input name=
“key” type=
“hidden” value=
“<?php echo $key;?>”/>

                <?php }?>

 

代码看到这也许有人就晕了, 又出了一个字段:$key, 这段代码的意思是:如果key为空 显示:  <input name=’pwdtmp’ type=”password”/> ,如果不为空 显示 :<input name=”key” type=”hidden” value=”<?php echo $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.
“\r\nReply-To: $cfg_adminemail”;

        $mailbody =
“亲爱的”.$userid.
“:\r\n您好!感谢您使用”.$cfg_webname.
“网。\r\n”.$cfg_webname.
“应您的要求,重新设置密码:(注:如果您没有提出申请,请检查您的信息是否泄漏。)\r\n本次临时登陆密码为:”.$randval.
” 请于三天内登陆下面网址确认修改。

        \r\n
“.$cfg_basehost.$cfg_memberurl.”/resetpassword.php?dopost=getpasswd&id=
“.$mid.”&key=
“.$randval;

 

原文件是没有用传递key值,需要加上&key=”.$randval,问题就解决了,到此会员就可以通过邮件找回密码了!