junit - 由于 Bcrypt 加密,在单元测试期间更新 CRUD 出现问题
问题描述
我在将实体保存到数据库时对我的用户密码进行哈希处理。这样做时,我无法更新用户名,而无需再次散列密码。
我为它写了测试,但失败了。
@Test
@DisplayName("Update")
public void testForUpdate() {
final User user = new User("UserForUpdate", "UpdatedUser123");
this.userService.save(user);
User found = this.userService.findOneByUsernameAndPassword(user.getUsername(), user.getPassword());
assertTrue(found.getId() != null, "Found real user");
this.userService.save(found);
final User asserted = this.userService.findOneByUsernameAndPassword(found.getUsername(), user.getPassword());
assertTrue(asserted != null, "Updated user found");
assertTrue(user.getId() == asserted.getId(), "User ID is persisted");
}
UserService 的保存方法如下所示:
@Override
public User save(User newUser) {
newUser.setPassword(passwordEncoder.encode(newUser.getPassword()));
return repository.save(newUser);
}
像这样保存它我做错了吗?
我应该如何继续正确实施 CRUD 更新?
感谢您的任何指点
解决方案
存储用户时不要修改密码。而是在修改密码时对密码进行编码。
public class UserSevice {
...
public changePassword(User user, String plainPassword) {
user.setPassword(passwordEncoder.encode(plainPassword));
}
}
推荐阅读
- mysql - 有没有办法避免使用 WHERE 和 ORDER BY 对查询进行排序?
- reactjs - 反应:数据未显示在浏览器上,但显示在控制台上
- r - 反向数据框列
- javascript - 在 GAS 上触发表单提交但 ss.getLastRow(); 没有给我最新的条目
- php - 如何在任一条件匹配的情况下执行查询?
- rust - 打印选项
解包变量后变量给出错误 - javascript - 将 javascript 变量传递给 url 参数
- html - 如何制作更改主要内容时无需重新加载的侧边栏?
- javascript - 从输入 Laravel 插入多个数据
- go - 子文件夹调用文件夹 Golang