基于Ucenter的单点登录系统开发过程(一)

0
1077

计划给ElecSpark站群弄个单点登录,并整合用户信息和积分系统,遂开始研究Ucenter开发。

1
首先使用了官方的uc_client例程,部署到服务器上,作为现在ucenter server的一个app(此后称作sso-app),可以实现注册、登录、登出。

问题来了,在sso-app中注册的账号,必须在其他app中激活一次才能登录其他app,这个过程实际上就是app从ucenter读取用户数据,再写入自身数据库。

要想完成真正的单点登录,那就要在sso-app向ucenter写入用户数据的同时,向其他app写入数据。

这个写入过程在 uc_client\model\user.php 的 add_user 函数中

2
理论上只要在这个函数中 向其他app数据库写入用户信息就可以实现我要的效果。

但具体写哪几个表,我还不清楚,只能研究下discuz中注册时怎么写入数据库。

discuz写入数据库的操作在 source\module\member\member_register.php中:

主要就是用到了register_ctl这个类,遂又在source\class\class_member.php 中找到这个类,而注册函数为on_register()。
给跪了,这函数写的太尼玛长了。
搜索discuz用户表表明common_member,发现写入用户数据的操作,大概在780+行。
再搜索insert,发现程序应该向以下表都写入了文件:
common_regip
common_member
common_member_verify
common_member_verify_info
common_member_validate
【疑问:当QQ登录时,怎么写数据库,或者说怎么关联到现在的用户,这个待研究】

3
然后分别查这几个表的用处:
common_regip 限制注册IP的,这个基本可以忽视了
common_member是用户主表,这个不用说啥,必须写的
common_member_verify、common_member_verify_info、common_member_validate都是用于认证和审核的,貌似是不用管的。

难道说只用写common_member就行了?理论上应该有个函数用来初始化其他表吧,于是我决定把discuz的common_member_下的表都看一遍,验证下我的想法。

common_member_count 用于统计信息的,例如发了几个贴、几个精华、积分多少,这个确实每个用户都有一行;
common_member_field_forum 用于存用户一些信息的,也是每个用户都有一个(行)XXXX;
common_member_field_home 用户家园字段表,类似QQ空间的玩意,理论上应该不写也行,但既然每个用户都行,那还是新用户把默认数据初始化一次最好;
common_member_profile 用户详细信息,这个要做个初始化才行
common_member_status用户状态与数据统计表,也许大概有可能要做初始化

这样来看,就要写入这5个表

当然discuz是这样,其他的app还得对应修改。

没学过php的情况,能分析到这步已经很是不错了,明天继续。

参考资料:
http://faq.comsenz.com/library/?from=discuzheader
http://discuzt.cr180.com
http://my.oschina.net/u/1053317/blog/136041
http://www.nowamagic.net/librarys/veda/detail/1497
http://www.oicto.com/tag/ucenter/
http://www.ngro.org/tech/ucenter-synclogin-activation.html

留下一个答复

Please enter your comment!
Please enter your name here