Eloquent用户模型密码属性更新的火灾事件

时间:2014-03-13 17:17:37

标签: laravel eloquent

我有一个带有密码属性的用户模型。

如果我使用以下方法从数据库中检索它:

$user = User::find(3);

并更改密码值(在Controller中):

$user->password = Input::get('passwordValue')

我想触发 Eloquent更新事件,首先创建一个salt并将$ salt与$ passwordValue连接起来,然后将值分配给$ user->密码,例如:

$user->password = md5($salt . $passwordValue)

在此之后我可以保存$ user:

$user->save();

我希望每次用户在个人资料页面中更改密码时都会触发此事件。

1 个答案:

答案 0 :(得分:0)

您可以为模型中的密码字段定义一个setter:

public function setPasswordAttribute($value)
{
    $salt = 'whatever';
    $this->attributes['password'] = md5($salt.$value);
}

然后,在您的控制器(或其他)代码中,只需使用明文版本设置密码:

$user->password = Input::get('new_password');

但是,应该注意的是,在Laravel中,你真的不应该使用md5和salt来设置密码,而是使用Laravel提供的散列函数:

$this->attributes['password'] = Hash::make($value);

这将创建一个更强大的bcrypt生成的密码。但是,您必须更改检查密码的方式,尽管这很简单:

if (Hash::check($plaintext_password, $user->password)) {
    // password is correct
}

然而,除此之外,您应该使用Auth函数来处理登录,这样您甚至不需要直接使用Hash::check()

if (Auth::attempt(array('username' => Input::get('username'), 'password' => Input::get('password'))) {
    // logged in, redirect
} else {
    // attempt failed, set message and redirect
}
相关问题