ucenter作为用户中心与自己的应用集成的过程中,最愁人的就是用户修改密码与注册了
最近在做这方面的工作,总结一下,
ucenter与destoon的集成,这个具体的教程在destonn的官方网站中有介绍,我就不说了,
ucenter与ecmall的集成,这个也很方面,放一个integrate目录就可以了,
ucenter与smarket的集成,这个是没有在别人的基础上进行的开发
第一种注册:
destoon:做好配置好,destoon注册了就可以直接进入的ucenter的用户中心了,
ecmall可以做到这一点,ecamll结果就直接做了两个类,他们都继承自BasePassportUser这个类,然后根据你自己的配置
去选择实例哪个类,使用哪个接口
smarket这个,就好说了,完全使用ucenter中的数据就可以了
第二在ucenter中修改密码
在ucenter中修改密码之后,需要通知到用户修改密码了,要及时更新密码,
这一点,比较困惑我,因为我看到ucenter的通知都是单身通知,并且后边都没有加密码是什么内容,
UC后台更改密码后的通知程序:uc_server\control\admin\user.php
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password=');
然后这个过程由客户端去实现,在destoon中我发现客户端是这样实现的,只写了一句退出exit('1');
根本没有去实现这个过程,
$ucresult = uc_user_edit(addslashes($_G['username']), $_GET['oldpassword'], $_GET['newpassword'], '', $ignorepassword, $_GET['questionidnew'], $_GET['answernew']);
最近在做这方面的工作,总结一下,
ucenter与destoon的集成,这个具体的教程在destonn的官方网站中有介绍,我就不说了,
ucenter与ecmall的集成,这个也很方面,放一个integrate目录就可以了,
ucenter与smarket的集成,这个是没有在别人的基础上进行的开发
第一种注册:
destoon:做好配置好,destoon注册了就可以直接进入的ucenter的用户中心了,
ecmall可以做到这一点,ecamll结果就直接做了两个类,他们都继承自BasePassportUser这个类,然后根据你自己的配置
去选择实例哪个类,使用哪个接口
smarket这个,就好说了,完全使用ucenter中的数据就可以了
第二在ucenter中修改密码
在ucenter中修改密码之后,需要通知到用户修改密码了,要及时更新密码,
这一点,比较困惑我,因为我看到ucenter的通知都是单身通知,并且后边都没有加密码是什么内容,
UC后台更改密码后的通知程序:uc_server\control\admin\user.php
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password=');
然后这个过程由客户端去实现,在destoon中我发现客户端是这样实现的,只写了一句退出exit('1');
根本没有去实现这个过程,
而在discuz中,这个地方,也是生成一个随机的密码,就过去了,为什么不把密码传递过来呢对吧,
具体为会不把这个值传递过来的原因在这里
http://blog.csdn.net/sunbingzibo/article/details/43733267
这时如果我们以destoon为主要使用对象的话,比如客户在destoon的商务中心修改了密码,这时在ucenter中的密码并没有修改,那么登录时使用哪个密码呢
我没有找到相关的解决办法,去discuz中看了一下,发现discuz中只修改一次密码就可以了
原来ucenter中修改密码的那个地方,他调用了$ucresult = uc_user_edit(addslashes($_G['username']), $_GET['oldpassword'], $_GET['newpassword'], '', $ignorepassword, $_GET['questionidnew'], $_GET['answernew']);
这个函数,直接把密码就修改到ucenter中至于本地的密码改不改都无所谓了,反正又不用它来登录
所以按照上边的方法,我们来对destoon进行改造,在我使用的5.0的版本中
在/module/member/edit.inc.php中找到
if($do->edit($post))
{
if ($post['password'])
{
include DT_ROOT.'/api/ucenter/client.php';
$ucresult = uc_user_edit($post['passport'] , $post['oldpassword'], $post['newpassword'], $post['email'] );
define("UC_DBHOST", $MOD['uc_dbhost']) ;
.......
if ($ucresult == -1)
{
$mess= "profile_passwd_wrong";
message($mess);
// showmessage('profile_passwd_wrong', '', array(), array('return' => true));
} elseif ($ucresult == -4)
.........//从别的地方复制的代码.
}
}
这样进行改造一下,就可以了