Skip to content

Commit f35bfd6

Browse files
committed
修改短信验证码注册时候无法正确验证的bug
1 parent 73a5a32 commit f35bfd6

7 files changed

Lines changed: 54 additions & 18 deletions

File tree

src/main/java/com/javabaas/server/common/entity/SimpleCode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ public enum SimpleCode {
121121
SMS_INVALID_PARAM(7013, "短信传入参数不合法"),
122122
SMS_TEMPLATE_MISSING_PARAMETERS(7014, "模版缺少变量"),
123123
SMS_LIMIT_CONTROL(7015, "超出短信供应商发送频率限制"),
124+
SMS_CODE_WRONG(7016, "短信验证码错误"),
124125
SMS_OTHER_ERRORS(7099, "其他错误 请查看日志");
125126

126127
private int code;

src/main/java/com/javabaas/server/config/entity/AppConfigEnum.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@ public enum AppConfigEnum {
1212
SMS_HANDLER_ALIYUN_KEY("baas.sms.handler.aliyun.key", "阿里云key", ""),
1313
SMS_HANDLER_ALIYUN_SECRET("baas.sms.handler.aliyun.secret", "阿里云secret", ""),
1414
SMS_CODE_TEMPLATE_ID("baas.sms.codeTemplateId", "短信验证码模版id", ""),
15+
SMS_REGISTER_TEMPLATE_ID("baas.sms.registerTemplateId", "登录注册验证码模版id", ""),
16+
SMS_BIND_TEMPLATE_ID("baas.sms.bindTemplateId", "绑定手机号验证码模版id", ""),
1517
SMS_SIGN_NAME("baas.sms.signName", "短信签名", ""),
1618
SMS_SEND_INTERVAL("baas.sms.interval", "短信发送间隔", "60"),
1719
// 推送相关
18-
PUSH_HANDLER("baas.push.handler","推送处理","jpush"),
20+
PUSH_HANDLER("baas.push.handler", "推送处理", "jpush"),
1921
PUSH_HANDLER_JPUSH_KEY("baas.push.handler.jpush.key", "极光推送key", ""),
2022
PUSH_HANDLER_JPUSH_SECRET("baas.push.handler.jpush.secret", "极光推送secret", ""),
2123
// 文件存储相关
22-
FILE_HANDLER("baas.file.handler","推送处理","qiniu"),
24+
FILE_HANDLER("baas.file.handler", "推送处理", "qiniu"),
2325
FILE_HANDLER_QINIU_AK("baas.file.handler.qiniu.ak", "七牛ak", ""),
2426
FILE_HANDLER_QINIU_SK("baas.file.handler.qiniu.sk", "七牛sk", ""),
2527
FILE_HANDLER_QINIU_BUCKET("baas.file.handler.qiniu.bucket", "七牛bucket", ""),

src/main/java/com/javabaas/server/sms/handler/impl/MockSmsHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* 用于测试的短信发送器
1515
* Created by Codi on 2017/6/28.
1616
*/
17-
@Component
17+
@Component("mock")
1818
public class MockSmsHandler implements ISmsHandler {
1919

2020
private Log log = LogFactory.getLog(getClass());
@@ -32,7 +32,7 @@ public SimpleResult sendSms(String appId, String id, String phone, String signNa
3232
params.forEach((k, v) -> sms.append(v));
3333
}
3434
map.put(phone, sms.toString());
35-
log.info("Mock短信 phone:" + phone + " sms:" + sms);
35+
log.info("Mock短信 template:" + templateId + " phone:" + phone + " sms:" + sms);
3636
return SimpleResult.success();
3737
}
3838

src/main/java/com/javabaas/server/sms/service/SmsService.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,15 @@ public SimpleResult sendSms(String appId, String plat, String phone, String temp
8282
* @param ttl 失效时间(秒)
8383
* @param params
8484
*/
85-
public SimpleResult sendSmsCode(String appId, String plat, String phone, long ttl, BaasObject params) {
86-
//获取短信验证码对应模版
87-
String templateId = appConfigService.getString(appId, AppConfigEnum.SMS_CODE_TEMPLATE_ID);
85+
public SimpleResult sendSmsCode(String appId, String plat, String templateId, String phone, long ttl, BaasObject params) {
8886
if (StringUtils.isEmpty(templateId)) {
89-
throw new SimpleError(SimpleCode.SMS_CODE_TEMPLATE);
87+
templateId = getSmsCodeTemplateId(appId);
9088
}
9189
//生成六位随机数字验证码
9290
String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
9391
//记录验证码
9492
ValueOperations<String, String> ops = redisTemplate.opsForValue();
95-
ops.set(getKey(appId, phone), code, ttl, TimeUnit.SECONDS);
93+
ops.set(getKey(appId, templateId, phone), code, ttl, TimeUnit.SECONDS);
9694
//发送短信
9795
if (params == null) {
9896
params = new BaasObject();
@@ -102,15 +100,19 @@ public SimpleResult sendSmsCode(String appId, String plat, String phone, long tt
102100
return sendSms(appId, plat, phone, templateId, params);
103101
}
104102

103+
public SimpleResult sendSmsCode(String appId, String plat, String phone, long ttl, BaasObject params) {
104+
return sendSmsCode(appId, plat, getSmsCodeTemplateId(appId), phone, ttl, params);
105+
}
106+
105107
/**
106108
* 验证手机验证码
107109
*
108110
* @param phone 电话号码
109111
* @param code 验证码
110112
*/
111-
public boolean verifySmsCode(String appId, String phone, String code) {
113+
public boolean verifySmsCode(String appId, String templateId, String phone, String code) {
112114
//获取已缓存的手机验证码
113-
String key = getKey(appId, phone);
115+
String key = getKey(appId, templateId, phone);
114116
ValueOperations<String, String> ops = redisTemplate.opsForValue();
115117
String rightCode = ops.get(key);
116118
if (StringUtils.isEmpty(rightCode)) {
@@ -134,6 +136,18 @@ public boolean verifySmsCode(String appId, String phone, String code) {
134136
}
135137
}
136138

139+
public boolean verifySmsCode(String appId, String phone, String code) {
140+
return verifySmsCode(appId, getSmsCodeTemplateId(appId), phone, code);
141+
}
142+
143+
private String getSmsCodeTemplateId(String appId) {
144+
String templateId = appConfigService.getString(appId, AppConfigEnum.SMS_CODE_TEMPLATE_ID);
145+
if (StringUtils.isEmpty(templateId)) {
146+
throw new SimpleError(SimpleCode.SMS_CODE_TEMPLATE);
147+
}
148+
return templateId;
149+
}
150+
137151
/**
138152
* 选择短信处理器
139153
*/
@@ -151,8 +165,8 @@ private ISmsHandler getSmsHandler(String appId) {
151165
return handler;
152166
}
153167

154-
private String getKey(String appId, String phone) {
155-
return "App_" + appId + SMS_CODE_NAME + "_" + phone;
168+
private String getKey(String appId, String templateId, String phone) {
169+
return "App_" + appId + SMS_CODE_NAME + "_" + templateId + "_" + phone;
156170
}
157171

158172
}

src/main/java/com/javabaas/server/user/controller/UserController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ public SimpleResult loginWithPhone(@RequestHeader(value = "JB-AppId") String app
235235
public SimpleResult getSmsCode(@RequestHeader(value = "JB-AppId") String appId,
236236
@RequestHeader(value = "JB-Plat") String plat,
237237
@PathVariable String phone) {
238-
return userService.getSmsCode(appId, plat, phone);
238+
return userService.getRegisterSmsCode(appId, plat, phone);
239239
}
240240

241241
/**

src/main/java/com/javabaas/server/user/service/UserService.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.javabaas.server.common.entity.SimpleError;
55
import com.javabaas.server.common.entity.SimpleResult;
66
import com.javabaas.server.common.util.JSONUtil;
7+
import com.javabaas.server.config.entity.AppConfigEnum;
8+
import com.javabaas.server.config.service.AppConfigService;
79
import com.javabaas.server.object.entity.BaasObject;
810
import com.javabaas.server.object.entity.BaasQuery;
911
import com.javabaas.server.object.service.ObjectService;
@@ -38,6 +40,8 @@ public class UserService {
3840
@Autowired
3941
private ObjectService objectService;
4042
@Autowired
43+
private AppConfigService appConfigService;
44+
@Autowired
4145
private SmsService smsService;
4246
@Autowired
4347
private JSONUtil jsonUtil;
@@ -423,6 +427,12 @@ public void deleteUser(String appId, String plat, String name) {
423427
* @return 用户
424428
*/
425429
public BaasUser loginWithPhone(String appId, String plat, BaasPhoneRegister register) {
430+
//验证短信验证码
431+
boolean verifyResult = smsService.verifySmsCode(appId, getRegisterTemplateId(appId), register.getPhone(), register.getCode());
432+
if (!verifyResult) {
433+
//验证码错误
434+
SimpleError.e(SimpleCode.SMS_CODE_WRONG);
435+
}
426436
//判断用户是否存在
427437
BaasQuery query = new BaasQuery();
428438
query.put("phone", register.getPhone());
@@ -451,9 +461,18 @@ public BaasUser loginWithPhone(String appId, String plat, BaasPhoneRegister regi
451461
*
452462
* @param phone 手机号
453463
*/
454-
public SimpleResult getSmsCode(String appId, String plat, String phone) {
464+
public SimpleResult getRegisterSmsCode(String appId, String plat, String phone) {
455465
//发送短信验证码
456-
return smsService.sendSmsCode(appId, plat, phone, 600, null);//短信验证码默认十分钟内有效
466+
return smsService.sendSmsCode(appId, plat, getRegisterTemplateId(appId), phone, 600, null);//短信验证码默认十分钟内有效
467+
}
468+
469+
private String getRegisterTemplateId(String appId) {
470+
//获取登录注册短信验证码对应模版
471+
String templateId = appConfigService.getString(appId, AppConfigEnum.SMS_REGISTER_TEMPLATE_ID);
472+
if (StringUtils.isEmpty(templateId)) {
473+
throw new SimpleError(SimpleCode.SMS_CODE_TEMPLATE);
474+
}
475+
return templateId;
457476
}
458477

459478
private BaasUser trimUser(BaasObject object) {

src/test/java/com/javabaas/server/UserTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ public void testResetSessionToken() {
251251
@Test
252252
public void testRegisterByPhone() throws Exception {
253253
//获取短信验证码
254-
mockClient.user(app, HttpMethod.GET, "/api/user/getSmsCode/13800138000", null)
254+
mockClient.user(app, HttpMethod.GET, "/api/user/getRegisterSmsCode/13800138000", null)
255255
.andExpect(status().isOk())
256256
.andExpect(jsonPath("$.code", is(SimpleCode.SUCCESS.getCode())));
257257
String code = smsHandler.getSms("13800138000");
@@ -272,7 +272,7 @@ public void testRegisterByPhone() throws Exception {
272272
@Test
273273
public void testLoginByPhone() throws Exception {
274274
//获取短信验证码
275-
mockClient.user(app, HttpMethod.GET, "/api/user/getSmsCode/13813813838", null)
275+
mockClient.user(app, HttpMethod.GET, "/api/user/getRegisterSmsCode/13813813838", null)
276276
.andExpect(status().isOk())
277277
.andExpect(jsonPath("$.password").doesNotExist())
278278
.andExpect(jsonPath("$.code", is(SimpleCode.SUCCESS.getCode())));

0 commit comments

Comments
 (0)