1. springboot 实现用户注册时,通过短信验证码验证短信的功能,后台代码是怎么实现的?保存在 session中的吗?能帮我写个示例代码吗?
实现用户注册时,通过短信验证码验证短信的功能,可以按照以下步骤进行:
-
前端页面发送手机号码到后台,后台返回一个随机的验证码,并将验证码保存到 redis 缓存中,同时将手机号码和验证码的对应关系也保存到 redis 缓存中,有效期为 5 分钟。
-
前端页面将手机号码和验证码一起提交到后台,后台通过调用 redis 缓存中的数据来验证验证码是否正确,如果正确,则创建新用户,否则返回错误提示。
这里给出一个使用 Spring Boot 和 Redis 实现用户注册时,通过短信验证码验证短信的示例代码:
@RestController
public class UserController {
@Autowired
private RedisTemplate<String, String> redisTemplate;
// 发送验证码
@GetMapping("/sendSms")
public String sendSms(@RequestParam String phone) {
// 生成验证码
String code = String.valueOf(new Random().nextInt(899999) + 100000);
// 保存验证码到redis缓存中
redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
// 发送验证码的逻辑,这里不展开
return "验证码已发送成功!";
}
// 用户注册
@PostMapping("/register")
public String register(@RequestParam String phone, @RequestParam String code) {
String verifyCode = redisTemplate.opsForValue().get(phone);
if (StringUtils.isNotEmpty(verifyCode) && StringUtils.equals(code, verifyCode)) {
// 验证码验证通过,创建新用户,这里不展开
return "注册成功!";
} else {
return "验证码错误!";
}
}
}
上述代码中,使用 RedisTemplate 提供的 opsForValue() 方法来操作 Redis 缓存,并使用字符串存储验证码。验证码的有效期为 5 分钟。在发送验证码时,将验证码保存到 Redis 缓存中,然后返回”验证码已发送成功”的信息。在用户注册时,从 Redis 缓存中获取验证码,并和用户输入的验证码比较,如果一致,则创建新用户,否则返回”验证码错误”的错误信息。
2. 我没有买 Redis的服务,能用最简单的JAVA代码 也实现一个版本吗?
如果没有 Redis 服务的话,也可以使用最简单的 Java 代码实现用户注册时通过短信验证码验证的功能。这里简单介绍一个实现方式:
-
前端页面发送手机号码到后台,后台返回一个随机的验证码,并将验证码保存在一个 Map 类型的变量中,同时将手机号码和验证码的对应关系也保存在 Map 中,有效期为 5 分钟。
-
前端页面将手机号码和验证码一起提交到后台,后台通过从 Map 中取出数据来验证验证码是否正确,如果正确,则创建新用户,否则返回错误提示。
以下是示例代码,可以按照自己的需求进行修改:
@RestController
public class UserController {
private static final Map<String, String> codeMap = new HashMap<>();
// 发送验证码
@GetMapping("/sendSms")
public String sendSms(@RequestParam String phone) {
// 生成验证码
String code = String.valueOf(new Random().nextInt(899999) + 100000);
// 将验证码和手机号码的对应关系保存到一个 Map 中,有效期为 5 分钟
codeMap.put(phone, code);
TimerTask task = new TimerTask() {
@Override
public void run() {
codeMap.remove(phone);
}
};
new Timer().schedule(task, 5 * 60 * 1000);
// 发送验证码的逻辑
return "验证码已发送成功!";
}
// 用户注册
@PostMapping("/register")
public String register(@RequestParam String phone, @RequestParam String code) {
String verifyCode = codeMap.get(phone);
if (StringUtils.isNotEmpty(verifyCode) && StringUtils.equals(code, verifyCode)) {
// 验证码验证通过,创建新用户,这里不展开
return "注册成功!";
} else {
return "验证码错误!";
}
}
}
上述代码中,使用一个 Map 对象来保存验证码和手机号码的对应关系,并设置有效期为 5 分钟。在发送验证码时,将验证码保存到 Map 中,并使用定时器来删除失效的数据。在用户注册时,从 Map 对象中获取验证码,并和用户提交的验证码进行比较,如果一致,则创建新用户,否则返回”验证码错误”的错误信息。
赛文市场营销