好家伙, bug終究還是來了,而且是很離譜的bug 來吧,發現問題,再解決問題 1.註冊無法檢測到用戶名重覆 也就是說一個用戶名可無限註冊, 來看bug(。。。) (看來是後端驗證邏輯出了問題) 要是這麼上線估計直接寄了 2.完成註冊用戶名查重 大概率是後端出了問題 這裡我們先去看看後端,從後端去改 ...
好家伙,
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