onethink中修改ucenter用户的密码

onethink安装好之后,数据库中的两张表(忽略表前缀):ucenter_member和member表将作为用户表存在。在Admin后台新增用户时,这两张表将进行插入操作。


不过,如果想自己在前台注册用户的时候(仍然使用这两张表),需要注意一些地方:


注册用户时,逻辑上需要插入到ucenter_member表和member表,这些操作可以这样完成:使用User模块的User/Api/UserApi.class.PHP的register方法写入ucenter表、然后再用M('member')来插入到member表。详细的方法就不写了,thinkphp框架会的应该都能写出来。


当你想写个修改密码的功能时,你可以操作UserApi对象的updateInfo方法来完成(需要传参:uid,旧密码,新密码(数组形式))来完成。


问题是:如果你想写个找回密码的功能,这时updateInfo方法就没法帮你了,因为你需要传入旧密码才能修改新密码。此时,如果你直接MD5加密之后扔进ucenter_member表,则会造成这样的bug:你再次用这个用户的账号密码登录时,你发现密码不正确,登录失败!


问题的原因是:你直接进行了md5加密,但是你在注册用户的时候,不是简单的md5加密之后塞入数据库的,其实密码经过了think_ucenter_md5()函数加密,至于为什么是这个函数进行加密,你可以从User/Model/UcenterMemberModel.class.php的自动完成$_auto里看到。


在think_ucenter_md5方法里传入两个参数:第一个是密码,第二个是常量。

UC_AUTH_KEY,这个常量可以在User模块的配置文件Conf/config.php里查看到,而且这个常量是安装onethink的时候随机生成的字符串,用于ucenter用户加密。


知道了问题的原因,那么解决办法就很明了了:

在“找回密码”的时候,只要把新密码和UC_AUTH_KEY的值丢进think_ucenter_md5方法里,返回来的值插入到数据库里即可。


本人测试之后,发现登录结果变成功了。

补充:think_ucenter_md5函数在User模块的Common/common.php里,你可以看到具体的加密过程:


  1. /** 
  2.  * 系统非常规MD5加密方法 
  3.  * @param  string $str 要加密的字符串 
  4.  * @return string  
  5.  */  
  6. function think_ucenter_md5($str$key = 'ThinkUCenter'){  
  7.     return '' === $str ? '' : md5(sha1($str) . $key);  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值