[Registro de erros] Depois de criptografar com o BCryptPasswordEncoder de segurança, há um problema com a lógica para modificar a senha

Este erro ocorreu quando eu estava trabalhando em um projeto de gerenciamento de direitos

Erro de código

	 @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();
    }


Porque depois que uma string é criptografada por BCryptPasswordEncoder, o texto cifrado gerado é diferente, então esta comparação não pode ser feita aqui, e o método de correspondência de BCryptPasswordEncoder é necessário


    @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();
    }


Acho que você gosta

Origin blog.csdn.net/qq_42380734/article/details/107091291
Recomendado
Clasificación