首页IT科技前端注册登录怎么写(我的第一个项目(五):(前后端)注册用户名查重)

前端注册登录怎么写(我的第一个项目(五):(前后端)注册用户名查重)

时间2025-08-15 19:44:20分类IT科技浏览5071
导读:好家伙,...

好家伙,

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

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

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

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

来看bug(              。                     。       。)

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

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

2.完成注册用户名查重

大概率是后端出了问题

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

SysUserController.java文件:

来看看主要的注册方法

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

声明:本站所有文章       ,如无特殊说明或标注       ,均为本站原创发布              。任何个人或组织                     ,在未征得本站同意时              ,禁止复制              、盗用                     、采集       、发布本站内容到任何网站              、书籍等各类媒体平台                     。如若本站内容侵犯了原著者的合法权益       ,可联系我们进行处理       。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网上写小说赚钱的网站(网络平台什么平台赚钱-可以写小说的自媒体平台,自媒体赚钱操作使用教程) ofc系统(OfcPfwSvc.exe – OfcPfwSvc是什么进程 有什么用)