从与UCenter集成的过程中,看到Discuz的不开放

最近在做UCenter的开发,把我们一个网站与UCenter做整合,在这个整合之前,看到UCenter的介绍,觉得如果按照官方的介绍来 看,简直是我们这些不愿意单独开发CMS及BBS的网站的福音。但是在开发的过程中,却看到了UCenter的种种的缺陷,这些缺陷当然不能怪 Discuz,我也都想了些办法来解决,但是对于一个成熟的商业系统来说,Discuz的开放性,还有很长的路子需要走。
目前UCenter定位自己就是用户中心,但是一个真正的用户中心,他的工作却不是称职的。我觉得盛康应该讲UCenter把自己定位为一个与康盛旗下产 品整合的一个桥梁,而不要试图越俎代庖的想替代动易、PHPCms做用户管理。这样子设计的感觉,给我们就是类似于UCenter说了算,你们其它的应 用,都是我的附庸。从一个成熟的应用来说,UCenter存储的信息过于简陋,为了方便升级我们更不会轻易动里面的代码,而且从数据的安全性来 说,MsSQL的安全性比MySQL的安全性强不知道多少倍(MsSQL哪怕突发硬盘损坏,再服务重启之前你依然可以把数据备份出来,MySQL就什么都 没有了,毕竟哪怕是Raid5阵列,也有崩溃的可能;MySQL误操作数据之后,恢复很难,但是MsSQL有成熟的还原机制),把公司数据完全放在 UCenter上面,也没有办法放心。
1、用户注册:Discuz提供了注册的接口,就是你随时可以在UCenter里面注册会员,但是其它应用在UCenter注册用户时,不会主动的通知 你。最终我们只能通过做urlrewrite把UCenter下面的应用的注册地址强制转移到我们的注册页面,也就是先在我们的网站上面注册,再通过 UCenter注册。
2、用户登陆:从机制上来说,登陆的问题也不小。可能是考虑到安全的因素吧,syslogin登陆的ajax的调用解密之后是这样子的:

也就是密码得到的并非原文,因为传输的过程,实际上我们UCenter和我们都加密了,既然是加密的,那么这个密码用明文还是密文从安全的角度来说差别不大,但是一旦变成密文之后,我们自己开发的应用,想进行密码校验,就得多花很多的心思了。
3、修改密码:和注册一样,修改密码是单向的,不会主动通知其它应用密码修改这个事情。要实现修改只能改UCenter的机制:
1)UC后台更改密码后的通知程序:uc_servercontroladminuser.php 289行
原:
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password=');
更改为:
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.$orgpassword);
2)UC通知程序:uc_servercontroluser.php 99行
原:
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password=');
更改为:
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.$newpw);
3)如果要让DISCUZ!修改密码后通知其它PHPWEB修改密码,则要修改Discuz!的uc_clientcontroluser.php 第99行
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.$newpw);
当然,这个修改只能让DISCUZ!通知PHPWEB,而不能通知其它的DISCUZ!类应用,DISCUZ!的密码修改接收程序本身不支持修改密码
从上面的代码来看,其实康盛的设计人员是考虑过这种密码的同步问题的,只是有意的屏蔽了。不知道是为何故?

原文地址:https://www.cnblogs.com/jidan/p/3589313.html