如何在Laravel中向数据库存入哈希加密后的密码?
解决Laravel 9中用户注册密码哈希存入数据库的问题
你的问题出在模型修改器的命名不符合Laravel规范,导致setPassword方法未被自动触发。下面提供两种可行解决方案:
方案一:修正模型修改器命名(推荐)
Laravel字段修改器必须遵循set{Attribute}Attribute的命名规则,其中{Attribute}是字段名的驼峰形式(比如password对应Password)。修改你的User模型:
class User extends Model { use HasFactory; protected $fillable = [ 'login', 'password', 'email' ]; public function opinions() { return $this->hasMany(Opinion::class); } // 修正为正确的修改器命名 public function setPasswordAttribute($value) { $this->attributes['password'] = bcrypt($value); } }
修改后控制器代码无需改动:
public function store(RegistrationRequest $request) { return redirect( route( 'index.store', ['registration' => User::create($request->validated())] ) ); }
执行User::create()时,Laravel会自动检测password字段的赋值操作,调用setPasswordAttribute完成密码哈希。
方案二:手动在控制器中处理密码哈希
若不想修改模型方法,可直接在控制器内对验证后的密码做哈希处理:
public function store(RegistrationRequest $request) { $validatedData = $request->validated(); // 手动哈希密码 $validatedData['password'] = bcrypt($validatedData['password']); return redirect( route( 'index.store', ['registration' => User::create($validatedData)] ) ); }
这种方式跳过模型修改器,直接在入库前处理密码字段,同样能实现哈希存储的效果。
内容的提问来源于stack exchange,提问作者Dareks21
相关产品推荐
相关产品推荐

