laravel - 在 Laravel 中为已创建的用户加密密码
问题描述
我们在我们的 API 中发现了一个错误,该错误允许某些用户使用纯密码进行注册(尽管登录对他们不起作用)
它没有像bcrypt($password)
使用 Jenssegers\Mongodb 包那样加密并保存在 Mongodb 中。
我发现了如何在 Mongodb 中选择这些用户
db.getCollection('users').find({
"$expr": { "$lt": [ { "$strLenCP": "$password" }, 11 ] }
})
我怎样才能做同样的事情tinker
并更新所有这些用户的密码并再次保存?
解决方案
原始表达式直接注入查询中。可以在 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();
}
推荐阅读
- python - Facebook 从 image_hash 获取 AdImage url
- python-3.x - 颜色 = Color.query.all()
- reactjs - Reactjs 挂钩中的 Starter 需要从 column.js 组件中调用单击事件 openModal() ,其中事件在 Table.js 中定义
- c++ - 阻止铿锵格式断线
- python - Statsmodels 功效分析 观察次数
- python - 如何使用 KNeighbors 预测在 Google Vision OCR 中选择正确的文本位置?
- django - 仅在管理页面中获取以下内容
- macos - MacOS Safari 中的响应式 SVG 行为
- python - If else 语句不支持 *: 'NoneType' 和 'float' 的操作数类型
- sql - 从同一个表中的父行获取所有子代