You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:06:00