好家伙,

bug终究还是来了,而且是很离谱的bug

来吧,发现问题,再解决问题

1.注册无法检测到用户名重复

也就是说一个用户名可无限注册,

来看bug(。。。)

(看来是后端验证逻辑出了问题)

要是这么上线估计直接寄了

2.完成注册用户名查重

大概率是后端出了问题

这里我们先去看看后端,从后端去改写

SysUserController.java文件:

来看看主要的注册方法

@PostMapping("register")//    zxcv1234    //@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);    public CommonResp register(@RequestBody  SysUserSaveReq req){        //对密码进行md5加密        req.setPassword(DigestUtils.md5DigestAsHex(req.getPassword().getBytes()));        //resp为返回数据        CommonResp resp = new CommonResp();        //真正的注册        SysUserSaveResp saveResp = sysUserService.register(req);        return resp;

SysUserServiceImpl.java中重写register方法:

    @Override    public void register(SysUserSaveReq req) {        //        SysUserEntity user = CopyUtil.copy(req, SysUserEntity.class);        //ObjectUtils.isEmpty判断对象是否为空        if(ObjectUtils.isEmpty(req.getId())){            //查看该用户是否已注册            SysUserEntity userDb = selectByLoginName(req.getLoginName());            //用户未被注册            if(ObjectUtils.isEmpty(userDb)){                //用算法给帮它设置一个新ID                user.setId(snowFlake.nextId());                //这步是真正的往数据库里插数据了                sysUserMapper.insert(user);            }        }            }//查询loginName是否被注册    public SysUserEntity selectByLoginName(String loginName){        //QueryWrapper()        QueryWrapper wrapper = new QueryWrapper();        //这句可真是太高级了        //wrapper.lambda().eq()单表查询,在"SysUserEntity::getLoginName"找一个指定的"loginName"        //此处原公式为        wrapper.lambda().eq(SysUserEntity::getLoginName,loginName);        //BaseMapper的selectList()方法,根据id批量查询        List userEntityList = sysUserMapper.selectList(wrapper);//        List userEntityList = sysUserMapper.selectList(wrapper.lambda().eq(SysUserEntity::getLoginName,loginName));        //CollectionUtils.isEmpty()判断集合是否为空        if(CollectionUtils.isEmpty(userEntityList)){            //若判断为空,则返回null,意思是没被注册过            return  null;        }else {            return userEntityList.get(0);        }    }

随后我们就发现问题了,

能看出来,

这里的业务逻辑只处理了”用户名未被注册”的情况,

而没有处理”用户名已注册”的情况

所以我们加上就好了

SysUserServiceImpl.java中重写register方法:

    //不知道返回什么,随便造个对象返回    private SysUserSaveResp useless;    @Override    public SysUserSaveResp register(SysUserSaveReq req) {        //        SysUserEntity user = CopyUtil.copy(req, SysUserEntity.class);        //ObjectUtils.isEmpty判断对象是否为空        if(ObjectUtils.isEmpty(req.getId())){            //查看用户名是否已注册            SysUserEntity userDb = selectByLoginName(req.getLoginName());            //用户名未被注册            if(ObjectUtils.isEmpty(userDb)){                //用算法给帮它设置一个新id                user.setId(snowFlake.nextId());                //这步是真正的往数据库里插数据了                sysUserMapper.insert(user);                //哈哈,没东西返回了            }else{                //用户名已被注册,返回null                return null;            }        }        return this.useless;    }

在SysUserController.java文件中:

增加一个”注册失败”判定:

@PostMapping("register")//    zxcv1234    //@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);    public CommonResp register(@RequestBody  SysUserSaveReq req){        //对密码进行md5加密        req.setPassword(DigestUtils.md5DigestAsHex(req.getPassword().getBytes()));        //resp为返回数据        CommonResp resp = new CommonResp();        //真正的注册        SysUserSaveResp saveResp = sysUserService.register(req);        if(saveResp ==null){            resp.setSuccess(false);        }        return resp;    }

来到我们的前端,注册检验部分的代码:

同样,我们增加对”注册失败”的判定

//检验注册是否成功                    if (data.success) {                        //清空表单数据                        this.ruleForm = {};                        //发送成功通知                        this.$message({                            message: '恭喜你,注册成功,点击去登陆按钮进行登陆吧!!!',                            type: 'success'                        });                        this.$router.push({ path: '/login' })                    }                    //注册失败                    if (!data.success) {                        this.$message({                            message: '注册失败,该用户名已被注册',                            type: 'error'                        });                    }

然后就,搞定了

3.数据库表

login_name必须是唯一值,要把unique点上

4.gitee仓库拿源码

(已更新,解决了注册用户名重复的问题)

https://gitee.com/tang-and-han-dynasties/login-entity.git