首页 > 解决方案 > 在 Laravel 中为已创建的用户加密密码

问题描述

我们在我们的 API 中发现了一个错误,该错误允许某些用户使用纯密码进行注册(尽管登录对他们不起作用)

它没有像bcrypt($password)使用 Jenssegers\Mongodb 包那样加密并保存在 Mongodb 中。

我发现了如何在 Mongodb 中选择这些用户

db.getCollection('users').find({ 
    "$expr": { "$lt": [ { "$strLenCP": "$password" }, 11 ] } 
})

我怎样才能做同样的事情tinker并更新所有这些用户的密码并再次保存?

标签: laravelmongodbbcrypt

解决方案


原始表达式直接注入查询中。可以在 PHP 中编写与此类似的查询。

$users = User::whereRaw([
    '$expr' => ['$lt' => [['$strLenCP' => "$password"], 11 ]] 
])->get();

检查运行查询的结果是否正确,然后运行以下命令来更新文档。

确保在运行实时副本之前在数据库副本上进行测试。

foreach($users as $user) {
    User::where('_id', $user['_id'])
    ->update(
        ['password' => Hash::make($user['password'])]
    );
}

或者,获取所有用户并在内存中执行过滤。

$users = User::all();

$updateUsers = [];
foreach ($users as $user) {
    if(mb_strlen($user->password, "UTF-8") < 11) {
        $updateUsers[] = $user; 
    }
}

然后更新过滤的用户,

foreach($updateUsers as $user) {
    $user->password = bcrypt($user->password);
    $user->save();
}

推荐阅读