113
社区成员
发帖
与我相关
我的任务
分享用户登录和注册是基本上所有的网站都需要用到的功能,所以我就想夯实这方面的基础。
用户注册:提供一个接口供用户注册,并保存用户基本信息(如用户名、密码、邮箱)。
用户登录:用户输入用户名与密码,后端校验信息。
用户信息更新:用户输入新的信息,后端进行更新。
设置一个CommonResult类,将其用来返回给前端的信息。
public CommonResult doLogin(String username, String password) {
User user;
if (username.contains(EMAIL_FLAG)) {
//包含@符号,代表用户通过邮箱账号登录
user = userService.selectByKey(username);
} else {
//不包含@符号,代表用户通过手机号登录
user = userService.selectByPhon e(username);
}
if (user == null) {
return CommonResult.error("账号不存在");
}
if (!password.equals(user.getPassword())) {
return CommonResult.error("用户名或密码错误");
}
// 账号被锁定
if (!user.getUserState()) {
StpUtil.disable(user.getUserId(), -1);
}
StpUtil.login(user.getUserId());
//更新最后登录时间
user.setLoginTime(new Date());
userService.updateById(user);
//存放用户信息
Map<String, Object> info = new HashMap<>(4);
info.put("user", user);
//存放sessionId, 即 token
info.put("sessionId", StpUtil.getTokenInfo().getTokenValue());
List<Role> roles = userService.getRoleList(user.getUserId());
Set<String> roseNames = roles.stream().map(Role::getRoleName).collect(Collectors.toSet());
Set<String> roseDescribes = roles.stream().map(Role::getRoleDescribe).collect(Collectors.toSet());
info.put("role", roseNames);
info.put("roleInfo", roseDescribes);
return CommonResult.success("登录成功", info);
}
@RequestMapping(value = "/allow/add")
public CommonResult add(User user) {
if (user.getPassword() != null && user.getUserName() != null) {
/*// String encodePassword = SaSecureUtil.md5BySalt(user.getPassword(), user.getAccountNumber());*/
user.setPassword(user.getPassword());
user.setUserState(true);
user.setStatus(UserStatusEnum.CUSTOMER);
if (userService.insertData(user)) {
log.info("用户添加成功,用户信息:{}", user);
return CommonResult.success("注册成功", user);
} else {
return CommonResult.error("注册失败");
}
}
return CommonResult.error("用户数据不存在");
}
@RequestMapping(value = "/allow/update")
public CommonResult update(User user) {
if (user.getUserState() != null && user.getUserState()) {
StpUtil.untieDisable(user.getUserId());
}
if (userService.updateById(user)) {
return CommonResult.success("信息保存成功", user);
}
return CommonResult.error("信息保存失败");
}
@RequestMapping(value = "/allow/resetpwd")
public CommonResult resetPwd(String account, String password) {
if (account != null && password != null) {
Integer id = userService.selectIdByKey(account);
/*// String encodePassword = SaSecureUtil.md5BySalt(password, account);*/
User user = new User();
user.setUserId(id);
user.setPassword(password);
if (userService.updateById(user)) {
return CommonResult.success("重置密码成功", user);
}
return CommonResult.error("重置密码失败");
}
return CommonResult.error("用户数据不存在");
}
用户在注册时,系统没有正确检测到邮箱或手机号已经存在,导致注册失败。
原因:
检查邮箱或手机号是否存在的方法返回值处理不当,或者数据库查询逻辑有误。
解决方案:
优化查询逻辑:确保在检查邮箱或手机号是否存在时,返回值处理正确。
用户在被锁定状态下仍然能够登录系统。
原因:
在检查用户状态时,逻辑判断有误,没有正确地禁用被锁定的用户。
解决方案:
检查用户状态:在用户登录时,先检查用户的锁定状态,如果用户被锁定,则禁止登录并返回相应提示。
用户登录、注册、更新还是后端开发比较基础的部分,通过写完这部分的代码,让我对项目开发有了更加明确的认识。