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);
}

onethink中修改ucenter用户的密码相关推荐

  1. Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码

    在上一篇随笔里面详细讲解了Linux系统的启动过程 (Linux学习之CentOS(二十一)--Linux系统启动详解),我们知道Linux系统的启动级别一共有6种级别,通过 /etc/inittab ...

  2. oracle的口令就是密码吗,如何修改Oracle用户的密码(不改变原密码)

    如何修改Oracle用户的密码 有的人回答说这个不是很简单吗 alter user identified by +密码 如果不知道用户的密码情况下,不能改变原始密码呢(适用于用户密码过期) 测试如下 ...

  3. Linux修改root用户登录密码

    echo root:123456 |chpasswd root ---- 登录名 123456 ---- 新登录密码 可以调用system函数,实现在应用程序中修改root用户的登录密码,限制teln ...

  4. xampp mysql是空的_xampp中修改mysql默认空密码(root密码)的方法分享

    参考了网上提供的一些方法,发现说的都挺复杂.下面同大家分享一种简单快捷的方法. 首先说明下mysql用户的相关信息是保存在mysql数据库的user表中的,并且该表的密码字段(Password)是通过 ...

  5. 阿里云 修改服务器密码 如何修改root密码?如何修改普通用户的密码?

    我们平时经常性的忘记某个linux用户的密码,我们该如何修改linux用户的密码呢?修改用户密码是,通常需要我们交互时的输入两次密码以确认是否更改成功,但是平时在程序中使用时,不方便处理交互时的密码输 ...

  6. linux忘记mysql登录用户密码_linux中忘记mysql用户root密码解决方案

    1.vim /etc/my.cnf [mysqld] skip-grant-tables ##追加此行,跳过权限表, 2.重启mysql systemctl restart mysqld 3.mysq ...

  7. linux中忘记mysql用户root密码解决方案

    linux中忘记mysql用户root密码解决方案 参考文章: (1)linux中忘记mysql用户root密码解决方案 (2)https://www.cnblogs.com/songbao/p/11 ...

  8. mysql 复制用户_MySQL修改复制用户及密码

    在生产环境中有时候需要修改复制用户账户的密码,比如密码遗失,或者由于多个不同的复制用户想统一为单独一个复制账户.对于这些操作应尽可能慎重以避免操作不同导致主从不一致而需要进行修复.本文描述了修改复制账 ...

  9. Oracle中修改sysman和dbsnmp密码正确流程

    1.停止dbconsole $ emctl stop dbconsole 查看状态,确认dbconsole已经停止 $ emctl status dbconsole 2.修改sysman用户和dbsn ...

最新文章

  1. 7、kubernetes 核心技术-Controller 控制器
  2. 吊打一切现有开源OCR项目!90% +准确率,训练部署一条龙
  3. java 强弱软虚_Java的四种引用,强弱软虚,用到的场景
  4. sql oracle 自增长字段,在Oracle、MySQL、MS SQL Server中创设自动增长字段
  5. 哪些类继承了Collection接口
  6. LeetCode 357. 计算各个位数不同的数字个数(DP)
  7. 丘成桐在CNCC会议的演讲全文
  8. android 生成泛型对象,java android解析多层含有泛型对象的json数据获取不到泛型类型解析失败解决办法...
  9. 微服务系列之ZooKeeper注册中心和Nacos注册中心Nacos和Zookeeper对比
  10. Hadoop进阶之输入路径如何正则通配?
  11. cad坐标提取插件_如何快速地将CAD里的坐标提取到Excel中?最简单的方法你知道吗?...
  12. map赋值给另一个map_如何写出一个能让面试官直呼“666”的深拷贝?
  13. 《研磨设计模式》抽象工厂模式与简单工厂模式的比较(golang)
  14. matlab 求平面方程,MATLAB求空间平面方程
  15. [项目管理]浅谈软件项目WBS任务分解
  16. intel®Cyclone® IV设备家族引脚连接准则
  17. 2015年工作总结——①名IT女的日常
  18. 生成时间序列每月月初月末
  19. 什么是WMS系统 金蝶仓库条码管理WMS系统介绍
  20. python随机库函数_python标准库中的随机分布函数

热门文章

  1. c语言中parameter和argument的区别
  2. 请教100位行业专家后,我总结出第三方支付“断直连”的8大疑问!
  3. 普及下电信直连、CN2(GIA)、本土运营商
  4. css tricks_电线之间:接受CodePen和CSS-Tricks声望的Chris Coyier访谈
  5. CPU之CPU一级\二级\三级缓存
  6. OpenTX与EdgeTX---kalrry
  7. 阿里云wordpress配置免费ssl证书
  8. 无线充电线圈发射端和接收端的区别
  9. 微信小程序向系统日历添加事件(提醒)实现
  10. 千锋教育redis笔记