您的位置:首页 > 编程语言 > Java开发

springboot 手机短信验证码登录之手机短信验证码发送

2020-07-15 05:55 375 查看

登录页面

由于之前的登录页面功能单一,于是我在W3layouts网站下载了免费的登录页面进行改造。保留了原来的账号密码登录,新增加了注册和短信验证码登录的位置,同时预留了QQ登录的控件(按钮)。
效果如下:

1.账号密码登录模块:

2.短信验证码登模块:

如果输入的手机号数据库中没有,表明该手机号没有注册,得先注册才能进行验证码登录。

3.注册模块:

短信验证码登录

前言:只有注册了的手机号才能使用验证码登录功能。

实现过程:

1.阿里云—>搜索短信服务—>新手引导

跟着流程走:


注意:
1.申请短信签名和模版,因为项目面向的是国内,所以申请国内的签名和模版就行;
2.发送的短信是需要花钱的,只要保证阿里云上面余额超过一毛钱就可以发送(少量的)短信。
3.发送短信验证码的核心代码在openAPI Explorer中,要使用核心代码是最好现在其中先发送测试。


4.官网有坑

<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>

我在pom.xml中添加该版本(4.5.0)依赖老报错,解决方法:
点击:

复制使用其中的两个依赖,如果核心代码看不懂,Java SDK中有说明:

5.创建

Access Key ID
Access Key Secret

2.springboot项目中使用

下面这个SendSms.java是官网核心的代码,我进行了一定的改造返回的是验证码。


生成验证码的类:生成6位数的验证码

public class GenerateCode {
private static final String VERIFY_CODE = "0123456789";

public static String produceVerCode(){
char[] verCode =new char[6];
SecureRandom secureRandom= new SecureRandom();
for(int ini= 0; ini<verCode .length; ++ini){
verCode [ini]=VERIFY_CODE.charAt(secureRandom.nextInt(VERIFY_CODE.length()));
}
return new String(verCode );
}
}

我把验证码存放到

Redis
中,如果用户登录成功便删除,设定验证码时长为一分钟。

发送短信验证码接口,MiaoshaUserService类中方法存放验证码:

public String doSendVerCode(String mobile) throws GlobalException {

//获取用户信息
MiaoshaUser miaoshaUser = getById(Long.parseLong(mobile));
if (miaoshaUser == null) {
throw new GlobalException(CodeMsg.MOBILE_NOT_EXIST);
}
String verCode = UUIDUtils.uuid();
//发送验证码
String vCode = sendMsg(mobile);
//存放验证码
redisService.set(MiaoshaUserKey.verCode, mobile, vCode);
logger.info("verCode:" + vCode);
return verCode;
}

效果

点击发送验证码之后,
在Redis中,临时存放的验证码:

收到的短信:

成功登录,进入商品详情页:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: