onethink中修改ucenter用户的密码

来源:互联网 发布:淘宝上新速度 编辑:程序博客网 时间:2024/05/01 02:16

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里,你可以看到具体的加密过程:


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



1 0
原创粉丝点击