如果一个用户注册一个账户,就会提交密码,给密码加盐有很多种方式,这里讲一种在自己定义的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处理存储数据->返回结果
这也算是实现了修改器的之前的数据传递吧!哈哈
最佳答案