Submitted by gouki on 2010, September 20, 3:47 PM
http://ucapi.com恢复啦。
以前是放在小茗的虚拟主机上,结果他的虚拟主机到期了,我也就撤了出来。
本来是想扔到http://kkread.com的机器上的,结果,被我折腾nginx没成功,连带http://kkread.com也打不开了。。
最后,我还是重新购买了一台VPS,将ucapi网站扔在上面了。感觉速度没以前快。不过没办法,忍忍了。。。
之所以扔在国外的VPS上面,主要还是因为备案太麻烦了,说不定过两天本站也会迁走,其实心里很难过,但没办法。备案太麻烦了,而且从心里对有些事有点抵触。
Tags: ucenter, uc, ucapi
Misc | 评论:0
| 阅读:16751
Submitted by gouki on 2009, December 31, 12:05 PM
上回我写过一点thinksns与ucenter整合的注意事项,详情可见:thinksns在整合Ucenter的时候注意事项,今天我写的另外的一些注意点。
上回仅仅是做UCAPI接口的通讯以及同步登录和退出,因此完全没有涉及到系统模块。今天我要讲的是,如何修改系统自带的login,logout,register,changepwd以及后台的管理。
如果你将login,logout,register都交由第三方来托管,那么,本文的前几段你几乎可以忽略掉。仅看最后的changepwd以及后台管理的注意事项。
OK,让我们开始吧。判断是否登录,我这里不管了,请看我上篇文章吧。。
【注意】由于加载uc_client,会导到错误发生,原因查看:THINKPHP框架与Ucenter通讯注意事项,因此,我在thinksns的define.inc.php中,强行定义了uc_connect为空,这是一个常量,在这里定义后,在uc_config文件中又定义了一次。会出现一个notice,这个我们不用管。常量是不会被覆盖的。之所以这样做,我是有理由的。thinksns在整合Ucenter的时候注意事项一文中我说过,uc.php没有用到任何thinkSNS除api外的核心函数,因此也就没有加载THINKPHP框架,所以不会有THINKPHP框架与Ucenter通讯注意事项文中所说的base类的冲突。而我们现在涉及的则是在thinksns内部使用uc_client,那就不得不先定义uc_connect模式了。正是基于常量不会被覆盖,所以uc_config文件,就不需要被修改了。【方法有点野蛮,但我想应该可以接受】
1、login,系统的login和dologin函数都在IndexAction.class.php中,因此,改起来比较方便,但是需要动 /public/themes/中的apps.html模版,因为登录框在这个文件中。没办法,不改不行,uc不支持email登录,所以不得不把 email改为username。然后在dologin方法中,直接调用接口,判断用户是否存在,如果不存在则返回错误,存在的话就登录。登录时还要判 断,如果该用户在thinksns库中没有记录,则生成一条记录,用户信息由uc_get_user取回来。同时设定active为1,代表是已激活用 户。然后就是原始的登录流程,生成session生成cookie之类的了
2、logout,除了系统标准的logout外,还需要调用一下uc_user_synlogout,以便向其他应用发向退出系统的请求
3、register,如果属于偷懒情况,你可以把register引用到别的应用中【我是自己定义了一个user应用来接管所有的,注册、登录、退出的,所以1、2这些问题,其实我都可以忽略掉】
4、changepwd,这是在用户信息管理界面中的。主要问题也就在这里。如果你不改程序,那你会在这里吐血,因为如果你的用户是通过 ucenter过来的,那么password并非标准的md5(password),它的password是有salt的【salt你可以看一下 ucenter表。不想多解释】,因此chagepwd功能,你必须得完全改掉。判断原始密码是否正确,也必须先用uc_get_user获取用户的信息 后,把获取回来的密码与提交过来的原始密码比对。更改密码时也需要用uc_user_edit进行修改【其实可以两步并一步,因为 uc_user_edit的第二个参数就是oldpassword,如果oldpassword不正确,会返回错误代码的,也可以少做一步】,更改完后, 就是一个比较重要的一步:把你刚才设置的newpassword,重写回thinksns数据库,可能你会认为是多余的,因为很明显,我们前面的操作都是 直接读写ucenter的用户资料,根本没有涉及到本地thinksns用户数据库,为什么还要写回密码?这其实是因为下面的第5步
5、管理,如果你是新安装thinksns,那么或许你不会遇到我说的问题,但如果你是已经安装好,而迁移过来的thinksns,你会发现,你永 远登录不了管理界面,为啥?因为你登录前台时的密码是发给ucenter的,而登录后台时,密码是thinksns本地的。因此,你必须得通过 changepwd功能先修改一下密码,然后才能操作【所幸管理员不多,这样的问题也都还能够被接受。】
---
如果有什么问题,还是发到http://www.ucapi.com去比较好。呵呵。在这里,我就纯记录一下而己了。
Tags: thinksns, ucenter
PHP | 评论:0
| 阅读:22394
Submitted by gouki on 2009, November 24, 9:23 AM
thinksns在整合ucenter的时候难度并不大。主要有几个思路,不要错过就行了
1、不要想着把thinkphp框架整合进去,那样只会让你效率大低
2、合理应用thinksns提供的API,在API里面有取得当前登录用户的资料等信息,而且也有一个比较完整的数据库操作类【主要是不需要再调用config等配置了】
3、利用ucenter整合的时候,只能利用thinksns的一个cookie: remembor【开始为了这个我折腾了半天,我一直都打成remember。。。。汗一下先】(由于现在我是在一台机器上试,对于$_SERVER['USER_AGENT']是否一致还没有完全测试。。。)
4、整合的两个重要环节就是同步登录和退出。登录的时候要注意一下,两边的密码机制不一样,第一次同步资料的时候需要注意一下,否则一旦整合就不能使用原来的密码了。
5、同步登录的时候,如果需要强制注册,则必须要调用$api->user_add($data)这样的方法,具体的变量参数可以参考thinksns的lib中的indexAction.class.php ,顺便说一下,它的代码,注册中的隐私,其实没有插数据库。。。。骗子啊
6、起初的时候,我考虑需要读系统配置,就调用了$api->option_get()结果出错,由于ucenter api的出错是不显示的。调试了半天,才发现。原来是option_get()调用的get方法中,居然有一个ts_cache函数,而这个函数却是在api的范围之外,即它是属于thinksns的common方法中,在api中并没有被包含进来。。导致无法执行出错。
其他就没啥了。。至于feed同步啥的,则需要一点点的测试和更新,以同步到thinksns的feed库中。是个劳心劳力的过程。
PS:我会把本文同步到http://www.ucapi.com/wiki/上
Tags: thinksns, ucenter
PHP | 评论:1
| 阅读:22575
Submitted by gouki on 2009, September 24, 9:31 AM
本文首发于www.ucapi.com,下篇预告:supesite与uchome等应用在同步登录时注意事项
原文如下:
如果你写了一个WEB程序,你又想与ucenter共用一个用户库,你会怎么做?
来吧,让我告诉你,只要几个简单的步骤就行了。
1、先到ucenter administrator建一个应用,在应用里配置完你的项目的地址,在UC_KEY那里随便输入一些字符串,越长越好。【在这里有配置通讯文件的名 称,好象是提示你在api目录下,你可以定义一个,默认是uc.php】。然后你会一直发现应用列表中,该应用一直是通讯失败。
2、生成应用后,在应用详情的最下方有一个textarea框,这个就是系统帮你生成的连接ucenter的配置文件 。
3、在您的项目根目录下建立一个api目录,里面放上刚才说的通讯文件,默认是uc.php
在通讯文件里定义一些常量,可以从uchome、supesite、等里面拷贝出来,其实就是一些返回值 的常量。
加载刚才ucenter administrator所生成的配置文件。
到comsenz的任何一个程序中拷贝一下authcode函数(一般在common.inc.php或者global.inc.php中)
写上简单的判断代码:
PHP代码
- $code = $_GET['code'];
-
-
- parse_str(authcode($code, ‘DECODE’, UC_KEY), $get);
-
-
- if(time() – $get['time'] > 3600) {
- exit(’Authracation has expiried’);
- }
-
-
- if(emptyempty($get)) {
- exit(’Invalid Request’);
- }
-
-
- $action = $get['action'];
-
-
- if ($action == ‘test’){
- exit(API_RETURN_SUCCEED);
- }
4、写完这样的代码后,去ucenter管理中心看一下应用列表,是不是通讯成功了?
其实那个通讯成功,就是发送了一个 action = test过来。所以当返回1的时候就直接成功了。
不过,由于exit();函数自身的状态,如果参数是字符串,则会直接输出,而如果参数是整数,则仅仅用来表示退出程序,而整数则代表了error code。
If status
is an integer, that value will also be used as the exit status. Exit statuses should be in the range 0 to 254, the exit status 255 is reserved by PHP and shall not be used. The status 0 is used to terminate the program successfully.
这时候,你就会发现,你必须得使用exit(”1″);才会真正的输出1。【当然,这是PHP的基础,与通信问题不大,在这里提出来,只是为了防止你明明写了exit(1),却不会输出而在那里拼命调试】
OK,到现在为止,一个简单的通讯就完成了。如果你需要更多的功能,可以参考一下server究竟提供了哪些服务,然后写上针对性的代码和判断就可以了。
本文没图,但我相信,说的应该够明白了吧?
Tags: ucenter, ucapi
PHP | 评论:2
| 阅读:21766
Submitted by gouki on 2009, September 2, 10:26 AM
搜索ucenter的手册时,发现了ucapi.com网站,上面已经有一些内容了,什么使用手册,官方API,官方例程之类的。
以前下载的都是离线版的chm文件 ,经常会在硬盘里找不到。现在有一个在线版的。方便很多。查起来也很容易
呵呵。也算是推荐一下了。。
如果是用comsenz系统的人,估计都会用到ucenter吧。那么ucapi这样的东西就必须要看了
Tags: ucenter, api, ucapi
PHP | 评论:1
| 阅读:21581