关闭

DEDE修改注册邮箱时一起修改UCenter中用户邮箱的问题

1277人阅读 评论(0) 收藏 举报
分类:

最近在做一个项目,就是在账号安全栏目中加一个修改邮箱并验证的功能,这个功能并不复杂,可以参照用户注册时的邮箱验证来实现。

就是当用户更改邮箱并提交之后,发一封包含一个链接的邮件到用户的新邮箱中,当用户点击该链接后,打开对应的php文件,核实哈希码,然后修改dede数据库中的邮箱字段。

其中有这样的一段代码:

    #api{{
    if(defined('UC_API') && @include_once DEDEROOT.'/uc_client/client.php')
    {
        $emailnew = $email != $row['email'] ? $email : '';
        //var_dump($cfg_ml->M_LoginID);echo('@@@');var_dump($oldpwd);echo('@@@');var_dump($userpwd);echo('@@@');var_dump($emailnew);die('@@@');
        $ucresult = uc_user_edit($cfg_ml->M_LoginID, $oldpwd, $userpwd, $emailnew);        
    }
    #/aip}}
这是更新UCenter中用户邮箱字段的,我打印出了uc_user_edit()函数中的每个参数,可是我按照它的类型插入参数后,无论如何就是不能修改UCenter中的邮箱字段。

为此我折腾了差不多两天的时间,结果偶然发现,只要我插入的邮箱是ucenter中已经存在的邮箱,那么就无法更新该字段,也就是说一个邮箱只能对应一个用户。

而我每次都是用163或者sina的邮箱,而这两个邮箱ucenter中已经有了,所以不能修改。我修改了一个新邮箱后,更新成功!

我一直以为是修改后的dede代码有问题,没想到问题出在了这里,为此花了大量的时间和精力,非常之坑爹!

在此记录,以免忘记(虽然想忘掉这事很难),同时也提醒遇到类似问题的朋友,有时候,要相信自己,相信自己的代码,考虑一下是不是其他的情况影响。


还有一点,我们在dede后台的会员管理中修改用户的密码和邮箱,在ucenter中无法做到同步修改,加上上面的代码也不行,因为$oldpwd无法获取到,所以不能执行uc_user_edit()这个方法。经试验,在dede后台中改了原来的密码后,用老密码仍然可以登录,用新密码登录无效,只有在ucenter中改了密码后,才能生效。

如果要同步ucenter中的用户信息,那么想要找到E:\wamp\www\dede\uc_client\model\user.php,把if(!$ignoreoldpw && $data['password'] != md5(md5($oldpw).$data['salt'])){...}

这个判断注释掉。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1065330次
    • 积分:10158
    • 等级:
    • 排名:第1776名
    • 原创:137篇
    • 转载:445篇
    • 译文:3篇
    • 评论:28条
    文章分类
    最新评论