为已创建的用户加密 Laravel 中的密码
encrypt passwords in Laravel for users already created
我们在 API 中发现了一个错误,它允许一些用户使用纯密码注册(但登录对他们不起作用)
它没有像 bcrypt($password)
那样加密,而是使用 Jenssegers\Mongodb 包保存在 Mongodb 中。
我找到了如何 select Mongodb
中的那些用户
db.getCollection('users').find({
"$expr": { "$lt": [ { "$strLenCP": "$password" }, 11 ] }
})
如何在 tinker
中执行相同操作并更新所有这些用户的密码并再次保存?
Raw expressions 直接注入到查询中。可以在 PHP 中编写与此类似的查询。
$users = User::whereRaw([
'$expr' => ['$lt' => [['$strLenCP' => "$password"], 11 ]]
])->get();
检查 运行 查询结果是否正确,然后 运行 更新文档。
Make sure to test on a database copy before running on the live one.
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();
}
我们在 API 中发现了一个错误,它允许一些用户使用纯密码注册(但登录对他们不起作用)
它没有像 bcrypt($password)
那样加密,而是使用 Jenssegers\Mongodb 包保存在 Mongodb 中。
我找到了如何 select Mongodb
中的那些用户db.getCollection('users').find({
"$expr": { "$lt": [ { "$strLenCP": "$password" }, 11 ] }
})
如何在 tinker
中执行相同操作并更新所有这些用户的密码并再次保存?
Raw expressions 直接注入到查询中。可以在 PHP 中编写与此类似的查询。
$users = User::whereRaw([
'$expr' => ['$lt' => [['$strLenCP' => "$password"], 11 ]]
])->get();
检查 运行 查询结果是否正确,然后 运行 更新文档。
Make sure to test on a database copy before running on the live one.
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();
}