上一篇文章写了springboot的普通登录注册功能,并且实现了接口防刷,现在一般在商业环境中为了方便都会直接短信验证码登录注册。
短信验证码登录分为两种情况:1、还没有注册过,验证码登录会先根据手机号直接注册完事儿再登录。2、该手机号已经注册过,短信验证码直接登录。
一、短信验证码的流程
- 用户输入手机号,点击发送验证码按钮
- 前端将手机号发送给后端
- 后端生成一个6位的随机数通过短信发送给用户,之后手机号为key,随机数为value,存入缓存中,最后将短信发送是否成功的结果返回给前端。
- 当用户收到短信后,输入验证码,点击登录或者注册。
- 前端将手机号与验证码,发送给后端
- 后端通过缓存验证用户的验证码是否正确,再将结果返回给前端
- 用户的验证码登录流程结束
二、实现流程
这里使用【短信宝】会员注册 - Powered By SMSBAO的短信服务,短信便宜,审核效率高,发送成功率高,接口简单。
1.购买短信服务,刚注册的账号应该会有几条免费短信
2.VIP通道模板报备,报备通过之后直接发送短信即可。无需经过复杂的签名、模板审核。审核通过后,发送速度将提高到5秒左右。故建议客户申请好模板后再进行测试。为防止骚扰,默认相同号码一天只能接收4条短信,如果测试期间使用短信较多,可以在后台白名单设置中添加,即可取消限制。
三、编写代码
这里提供一个示例的Java代码,使用短信宝短信服务平台实现注册用户和登录的功能。
首先,需要在短信宝官网注册账号并申请API,获取到自己的用户名、密码和短信模板ID。
然后,使用Java代码进行调用短信宝API实现发送短信的功能。以下是示例代码:
<dependency>
<groupId>com.dtflys</groupId>
<artifactId>forest-core</artifactId>
<version>1.7.0</version>
</dependency>
第二步:创建一个service
import com.dtflys.forest.Forest;
import com.dtflys.forest.config.ForestConfiguration;
import com.dtflys.forest.config.HttpClientConfiguration;
import com.dtflys.forest.converter.json.ForestJsonConverter;
import com.dtflys.forest.http.ForestRequest;
import com.dtflys.forest.http.ForestResponse;
public class SmsSender {
public static void main(String[] args) {
String url = "https://api.smsbao.com/sms";
String username = "YOUR_USERNAME";
String password = "YOUR_PASSWORD";
String goodsId = "YOUR_GOODSID";
String phone = "YOUR_PHONE_NUMBER";
String content = "YOUR_MESSAGE_CONTENT";
ForestConfiguration configuration = ForestConfiguration.configuration();
configuration.setJsonConverter(new ForestJsonConverter());
HttpClientConfiguration httpClientConfiguration = HttpClientConfiguration
.configuration()
.setMaxConnections(10);
configuration.setHttpClientConfiguration(httpClientConfiguration);
Forest forest = Forest.create(configuration);
// 发送短信
ForestRequest<String> request = forest.post(url)
.header("Content-Type", "application/x-www-form-urlencoded")
.data("u", username)
.data("p", password)
.data("g", goodsId)
.data("m", phone)
.data("c", content);
ForestResponse<String> response = request.execute();
if (response.isSuccess()) {
System.out.println("短信发送成功:" + response.getContent());
} else {
System.err.println("短信发送失败:" + response.getContent());
}
}
}
在代码中,我们首先创建了一个Forest实例,然后使用Forest的POST方法构建了一个短信发送的请求,设置了必要的请求参数和请求头。最后执行请求,并根据响应结果输出发送结果。