用户登录
- 1、验证请求参数(是否为空,是否符合规则)
- 2、根据手机号和类型,查询用户对象
- 3、判断用户输入的密码和数据库密码是否一致
- 4、生成JWT的token字符串
- 5、构造返回数据
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
/**
* 用户登录
* @param dto
* @return
*/
@Override
public ResponseResult login(LoginDto dto) {
//1. 拿取数据并判空
String username = dto.getUsername();
String password = dto.getPassword();
String utype = dto.getUtype();
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password) || StringUtils.isEmpty(utype)) {
// 抛出异常
throw new BusinessException(ErrorCode.LOGINERROR);
}
//2. 判断用户是否存在
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getPhone,username)
.eq(User::getUtype,utype);
User user = userMapper.selectOne(wrapper);
if (ObjectUtils.isEmpty(user)) {
// 抛出异常
throw new BusinessException(ErrorCode.LOGINERROR);
}
//3. 判断密码是否正确
password = SecureUtil.md5(password);
String dbPassword = user.getPassword();
if (!dbPassword.equals(password)) {
// 抛出异常
throw new BusinessException(ErrorCode.LOGINERROR);
}
//4. 生成token
Map<String,Object> maps = new HashMap<>();
maps.put("username",username);
maps.put("companyId",user.getCompanyId());
maps.put("companyName",user.getCompanyName());
String token = JwtUtils.createToken(maps, 240);
//5. 创建结果
LoginVo vo = new LoginVo(token,user.getName());
return ResponseResult.okResult(vo);
}
}