散列密码但仍然简单地使用 Eloquents ::create($input)

Hash a password but still simply use Eloquents ::create($input)

使用 Laravel 4.2 用户系统并进行注册。

验证通过后我这样做:

User::create($input);
return Redirect::to('/');

它正确地存储了我的用户,但它当然有一个未散列的密码,因为它刚刚传入:

$Input = Input::all();

我不想手动将所有字段添加到创建方法中,有没有办法仍然只传入 $input,但对密码部分进行哈希处理?

我还应该在 Laravel 上使用散列或加密作为密码吗?

您不需要添加所有字段。一种选择是仅从输入数组中检索密码字段并将其替换为散列密码。

$input = \Input::all();
// get the password and save it with its hash
$input['password'] = \Hash::make($input['password']);
User::create($input);
return Redirect::to('/');

您正在使用Eloquent模型,因此您可以通过模型本身轻松转换密码属性。

只需将此函数添加到您的 Eloquent 模型中,然后做您正在做的任何事情,无需更改 $input 数组。

public function setPasswordAttribute($password)
{
    $this->attributes['password'] = \Hash::make($password);
}

这样您就可以对您的请求数据属性应用任何类型的修改。