这个错误发生在我做一个权限管理项目当中
错误代码
@Override
public Results<Void> changePassword(String username, String oldPassword, String newPassword) {
// 根据用户名查询
SysUser user = sysUserMapper.selcetUserByUsername(username);
// 判断用户是否为空
if (user == null) {
return Results.failure(1, "用户不存在");
}
// 校验之前的密码是否正确, 这里就是错误所在
if (!(new BCryptPasswordEncoder().encode(user.getPassword()).equals(oldPassword))) {
return Results.failure(1, "旧密码错误");
}
// 修改数据库中的密码
sysUserMapper.update(user.getId(), new BCryptPasswordEncoder().encode(newPassword));
return Results.success();
}
因为用一个字符串通过BCryptPasswordEncoder加密后,生成的密文是不同的,所以这里不能这样比较,需要BCryptPasswordEncoder的匹配方法
@Override
public Results<Void> changePassword(String username, String oldPassword, String newPassword) {
// 根据用户名查询
SysUser user = sysUserMapper.selcetUserByUsername(username);
// 判断用户是否为空
if (user == null) {
return Results.failure(1, "用户不存在");
}
// 校验之前的密码是否正确
if (!new BCryptPasswordEncoder().matches(oldPassword, user.getPassword())) {
return Results.failure(1, "旧密码错误");
}
// 修改数据库中的密码
sysUserMapper.update(user.getId(), new BCryptPasswordEncoder().encode(newPassword));
return Results.success();
}