今天在做项目时发现这样的一个问题,用uc集成的phpcms_v9 和discuz x2.5修改了密码没有同步。
研究了一下phpcms_v9 sso的源码 发现是他官网存在的一个BUG,大致是这样的
phpcmsv_9同步登陆的时候 以phpsso为同步通信的中介, 然后 通知它下面的各个应用,理论上面这样是没有错的,
但是他业务的代码有一部分逻辑问题,就是 它登陆的时候 如果开启了uc的同步功能,uc那边把登陆以后的结果多是安装
它文档上面的标准说明返回的,phpsso这边的业务代码他只处理了一部分uc的返回状态 。
即 比如
list($uid, $username, $password, $email) = uc_user_login($_POST['username'], $_POST['password']); if($uid > 0) { echo '登录成功'; } elseif($uid == -1) { echo '用户不存在,或者被删除'; } elseif($uid == -2) { echo '密码错'; } else { echo '未定义'; }
phpsso这边只处理了 返回的结果为-1的状态,其他的几个状态没有处理 所以导致了逻辑上面的错误
我们把项目下面的 phpsso_server/phpcms/modules/phpsso/index.php
public function login() { } 这个方法里面的一部分业务修改一下
//ucenter登陆部份 if ($this->config['ucuse']) { if($uid == -1) { //uc不存在该用户,调用注册接口注册用户 $uid = uc_user_register($this->username , $this->password, $userinfo['email'], $userinfo['random']); if($uid >0) { $this->db->update(array('ucuserid'=>$uid), array('username'=>$this->username)); } }else if($uid==-2){ exit("-2"); } }
增加其它几个返回值的判断。
还要修改一个地方 大致是 350航左右 修改结果如下
if(!empty($userinfo) ) { //&& $userinfo['password'] == create_password($this->password, $userinfo['random']) if($this->config['ucuse']){ //登录成功更新用户最近登录时间和ip $this->db->update(array('lastdate'=>SYS_TIME, 'lastip'=>ip()), array('uid'=>$userinfo['uid'])); exit(serialize($userinfo)); }else{ if($userinfo['password'] == create_password($this->password, $userinfo['random'])){ //登录成功更新用户最近登录时间和ip $this->db->update(array('lastdate'=>SYS_TIME, 'lastip'=>ip()), array('uid'=>$userinfo['uid'])); exit(serialize($userinfo)); }else{ exit('-2'); } } }
这个是增加判断 如果开启了 uc那么登陆的密码就按照uc的接口标准,否则 走的是 phpsso这边的接口。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南