好家伙,
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<SysUserEntity> wrapper = new QueryWrapper<>();
//这句可真是太高级了
//wrapper.lambda().eq()单表查询,在"SysUserEntity::getLoginName"找一个指定的"loginName"
//此处原公式为
wrapper.lambda().eq(SysUserEntity::getLoginName,loginName);
//BaseMapper的selectList()方法,根据id批量查询
List<SysUserEntity> userEntityList = sysUserMapper.selectList(wrapper);
// List<SysUserEntity> 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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)