注册功能的实现
思路:用户输入用户名,手机号,密码作为登录所用的数据,后端检验用户名,密码,手机号的合法性,
并且后端可以通过手机号唯一的特性来验证该手机号是否已被注册过,若被注册过,则返回错误信息,
否则,使用UUID生成盐值来对密码进行加盐处理,然后再使用md5对密码进行加密(加盐值的好处就是
即使md5加密的密码被破解,破解者也无法得到用户的真实密码),最后将用户插入到user表中。
具体代码:
public RestResult registerUser(User user) {
//判断手机号,密码,用户名是否有效
String userName = user.getUserName();
String telephone = user.getTelephone();
String password = user.getPassword();
if (!StringUtils.hasLength(userName) || !StringUtils.hasLength(telephone) || !StringUtils.hasLength(password)) {
return RestResult.fail().message("用户名或手机号或密码不能为空!");
}
//判断该手机号是否已注册过
if (isTelephoneExit(telephone)) {
return RestResult.fail().message("手机号已被注册过");
}
//注册该用户,密码加盐处理,并使用md5加密存储
//生成密码盐值
String salt = UUID.randomUUID().toString().replace("-", "")
.substring(15);
//密码加盐处理
user.setSalt(salt);
user.setPassword(password + salt);
//md5加密
String newPassword = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
user.setPassword(newPassword);
//设置注册时间
user.setRegisterTime(DateUtil.getCurrentTime());
//插入到数据库中
boolean cnt = save(user);
if (cnt) {
return RestResult.success();
}
return RestResult.fail().message("注册失败,请检查输入信息");
}
登录功能实现
思路:用户在前端输入手机号和密码,后端接收到后进行验证,首先,通过手机号查询用户,若查询不到,则说明该手机号尚未注册,返回错误信息,
若查询到用户,则进行密码比较,需对传过来的密码先加盐,再使用md5加密,最后再校验,若密码校验通过,则创建一个twt用作以后用户请求
校验他已经登陆过的一个依据。
具体代码:
public RestResult<User> login(User user) {
//根据手机号查询用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getTelephone, user.getTelephone());
User user1 = getOne(queryWrapper);
if (user1 == null) {
return RestResult.fail().message("请先注册!");
}
//判断密码是否一致
String password = user.getPassword();
password += user1.getSalt();
String newPassword = DigestUtils.md5DigestAsHex(password.getBytes());
if (!newPassword.equals(user1.getPassword())) {
return RestResult.fail().message("密码错误!");
}
user1.setSalt("");
user1.setPassword("");
return RestResult.success().data(user1);
}
//判断手机号是否已在user表中存在
public boolean isTelephoneExit(String telephone) {
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getTelephone, telephone);
User user = getOne(queryWrapper);
return null != user;
}
标签:return,手机号,登录,网盘,密码,user,注册,RestResult,String
From: https://www.cnblogs.com/ydw333/p/18211799