1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
//注入stringRedisTemplate
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public Result login(LoginFormDTO loginForm, HttpSession session) {
//1.校验手机号
String phone = loginForm.getPhone();
if(RegexUtils.isPhoneInvalid(phone)){
//2.不符合返回错误信息
return Result.fail("手机号格式错误");
}
//3.手机号校验成功,校验验证码,验证码从redis中获取
String code = stringRedisTemplate.opsForValue().get("login:code:"+phone);
String logincode = loginForm.getCode();
if (code==null||!code.toString().equals(logincode)){
//4.验证码错误
return Result.fail("验证码错误");
}
//5.验证码一致,查询是否存在用户
//query()是mp提供的,本类继承了extends ServiceImpl<UserMapper, User>
User user = query().eq("phone", phone).one();
if (user==null){
//6.不存在用户,创建新用户
user=createUserWithPhone(phone);
}
//7.用户存在,生成用户的token作为登录凭证
String token = UUID.randomUUID().toString(true);
//8.存入redis时用的hash存储,因此这里要把userDto转换成hashmap
UserDTO userDTO = BeanUtil.copyProperties(user, UserDTO.class);
Map<String, Object> userMap = BeanUtil.beanToMap(userDTO,new HashMap<>(), CopyOptions.create()
.setIgnoreNullValue(true)
.setFieldValueEditor((fieldName,fieldValue)->fieldValue.toString()));
//9.token存入redis并设置token有效期
stringRedisTemplate.opsForHash().putAll("login:token:"+token,userMap);
stringRedisTemplate.expire("login:token:",30,TimeUnit.MINUTES);
return Result.ok(token);
}
@Override
public Result sendCode(String phone, HttpSession session) {
//1.校验手机号
if(RegexUtils.isPhoneInvalid(phone)){
//2.不符合返回错误信息
return Result.fail("手机号格式错误");
}
//2.符合生成验证码
String code = RandomUtil.randomNumbers(6);
//3.保存到redis中,设置有效期1分钟
stringRedisTemplate.opsForValue().set("login:code:"+phone,code,1L, TimeUnit.MINUTES);
//4.发送验证码给客户
log.info("验证码发送成功:{}",code);
//返回
return Result.ok();
}
|