在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用户中心发送给第三方网站了。
我来说两句: