如何使用model给密码加盐

浏览:3727 发布日期:2016/08/04 分类:ThinkPHP5专区 关键字: ThinkPHP5 模型 加盐
TP5设置的修改器和读取器,但都是针对数据库中单条的数据进行的操作.
如果一个用户注册一个账户,就会提交密码,给密码加盐有很多种方式,这里讲一种在自己定义的model中进行加盐的方式,此时就涉及到两个字段的问题了.

第一步 生成salt(生成salt的方法是静态方法)    protected static function generateSalt()
    {
        $str = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890';
        $salt = substr(str_shuffle($str),10,6);
        return $salt;
    }
第二步 把salt 存储到静态变量中(存储的时机很重要,要在修改器处理password之前)
所以用model里面自带的静态方法init()    protected static function init()
    {
        parent::init();
        self::$password_salt = self::generateSalt();
    }
当然了 要有这个静态变量进行存储    protected static $password_salt = '';第三步 密码修改器要用salt了    protected function setUserLoginPasswordAttr($value)
    {
        return md5($value).self::$password_salt;
    }
第四步 当然salt也是要存储到数据库的,他自动完成的,单要salt的修改器给他生成的盐    protected $auto = ['user_status'=>1, 'user_vip'=>0 ,'user_login_salt' ,'user_register_ip'];

    protected function setUserLoginSaltAttr()
    {
        return self::$password_salt;
    }
其实在控制器中,在进行save之前,直接 $usermodel->user_login_salt = generateSalt()就能快速实现加salt的操作.
只是为了聚合用户提交的信息,统一在model中处理
流程:用户提交数据->控制器接收数据->validate验证数据->model处理存储数据->返回结果

这也算是实现了修改器的之前的数据传递吧!哈哈
最佳答案
评论( 相关
后面还有条评论,点击查看>>