在Discuz修改密码,Ucenter返回给第三方网站的密码为空
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/120/ ]
具体的现象就是,用户在Discuz论坛修改密码,但是接入UCenter用户中心的第三方网站接收到的密码为空,用户名却能正常获取,这个问题很严重,导致了很多用户修改密码后,无法正常登录第三方网站了.
具体的现象就是,用户在Discuz论坛修改密码,但是接入UCenter用户中心的第三方网站接收到的密码为空,用户名却能正常获取,这个问题很严重,导致了很多用户修改密码后,无法正常登录第三方网站了。
为了快速解决问题,先百度了一下,但是没找到什么有帮助的线索,就立马把精力转向代码。由于是UCenter相关的功能出了问题,所以就把注意力集中在uc_client、uc_server这两块。很快,就发现control文件夹中的user.php控制器,其中的代码有点匪夷所思。打开Discuz根目录中的uc_client/control/user.php,搜索updatepw即可找到如下代码:
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password=');
$_ENV['note']->send();就是这段代码,把用户名通过UCenter用户中心传了出去,但是密码是空的。匪夷所思的是,第三方网站也是以这种方式传递用户名跟密码的,然而discuz却能正常修改密码。如果有人清楚其中的奥妙,还请多多指教,为了赶时间修复问题,就先把疑问放一边了。
把上边的代码改一下:
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.$newpw);
$_ENV['note']->send();这样就能把密码通过UCenter用户中心发送给第三方网站了。

咱来补充一个好了 管理员登录Ucenter后台之后(从uc_server/admin.php),修改用户密码之后,Ucenter返回给第三方网站的密码同样为空。。 解决办法: 打开uc_server\control\admin\user.php搜索updatepw即可找到如下代码: $_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='); 改成这样就好啦: $_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.$orgpassword);我来说两句: