我创建了CRUD来管理我的应用中的用户。现在,我的问题是我正在使用User::create(request()->all())
,我在我的模型中实现了setPasswordAttribute
方法,该方法自动加密密码,并且运行良好......但是......
我刚刚发现这与使用了ResetsPasswords
的auth使用的一些Laravels内置特征相混淆。所以我实现setPasswordAttribute
方法实际上导致auth脚手架开始双重加密密码,导致用户在重置密码后尝试登录时失败。
为了清洁代码,我想知道我能纠正这个问题的最佳方法。我知道我可以使用save
代替create
,但我希望尽可能保持控制器的小巧。
处理此问题的最佳方法是什么?我想的只是简单地加密实际请求输入的值,但这看起来很糟糕。
答案 0 :(得分:1)
您可以在html表单中为此字段使用其他名称,例如plain_password
,然后使用具有此名称的mutator改变password
字段。
这样,您就不必编写额外的代码,而Laravel代码本身也不会使用这个mutator。
public function setPlainPassword($value) {
$this->attributes['password'] = bcrypt($value);
}