|
|
@@ -5,17 +5,22 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
|
|
import me.chanjar.weixin.common.exception.WxErrorException;
|
|
|
import org.apache.commons.logging.Log;
|
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
+import org.linlinjava.litemall.core.notify.NotifyService;
|
|
|
+import org.linlinjava.litemall.core.notify.NotifyType;
|
|
|
+import org.linlinjava.litemall.core.notify.SmsResult;
|
|
|
+import org.linlinjava.litemall.core.util.CharUtil;
|
|
|
+import org.linlinjava.litemall.core.util.JacksonUtil;
|
|
|
import org.linlinjava.litemall.core.util.RegexUtil;
|
|
|
+import org.linlinjava.litemall.core.util.ResponseUtil;
|
|
|
+import org.linlinjava.litemall.core.util.bcrypt.BCryptPasswordEncoder;
|
|
|
import org.linlinjava.litemall.db.domain.LitemallUser;
|
|
|
import org.linlinjava.litemall.db.service.LitemallUserService;
|
|
|
-import org.linlinjava.litemall.core.util.JacksonUtil;
|
|
|
-import org.linlinjava.litemall.core.util.ResponseUtil;
|
|
|
-import org.linlinjava.litemall.wx.dao.WxLoginInfo;
|
|
|
import org.linlinjava.litemall.wx.dao.UserInfo;
|
|
|
import org.linlinjava.litemall.wx.dao.UserToken;
|
|
|
+import org.linlinjava.litemall.wx.dao.WxLoginInfo;
|
|
|
+import org.linlinjava.litemall.wx.service.CaptchaCodeManager;
|
|
|
import org.linlinjava.litemall.wx.service.UserTokenManager;
|
|
|
import org.linlinjava.litemall.wx.util.IpUtil;
|
|
|
-import org.linlinjava.litemall.core.util.bcrypt.BCryptPasswordEncoder;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
|
@@ -39,47 +44,48 @@ public class WxAuthController {
|
|
|
@Autowired
|
|
|
private WxMaService wxService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private NotifyService notifyService;
|
|
|
+
|
|
|
/**
|
|
|
* 账号登录
|
|
|
*
|
|
|
- * @param body 请求内容,{ username: xxx, password: xxx }
|
|
|
+ * @param body 请求内容,{ username: xxx, password: xxx }
|
|
|
* @param request 请求对象
|
|
|
* @return 登录结果
|
|
|
- * 成功则
|
|
|
- * {
|
|
|
- * errno: 0,
|
|
|
- * errmsg: '成功',
|
|
|
- * data:
|
|
|
- * {
|
|
|
- * token: xxx,
|
|
|
- * tokenExpire: xxx,
|
|
|
- * userInfo: xxx
|
|
|
- * }
|
|
|
- * }
|
|
|
- * 失败则 { errno: XXX, errmsg: XXX }
|
|
|
+ * 成功则
|
|
|
+ * {
|
|
|
+ * errno: 0,
|
|
|
+ * errmsg: '成功',
|
|
|
+ * data:
|
|
|
+ * {
|
|
|
+ * token: xxx,
|
|
|
+ * tokenExpire: xxx,
|
|
|
+ * userInfo: xxx
|
|
|
+ * }
|
|
|
+ * }
|
|
|
+ * 失败则 { errno: XXX, errmsg: XXX }
|
|
|
*/
|
|
|
@RequestMapping("login")
|
|
|
public Object login(@RequestBody String body, HttpServletRequest request) {
|
|
|
String username = JacksonUtil.parseString(body, "username");
|
|
|
String password = JacksonUtil.parseString(body, "password");
|
|
|
- if(username == null || password == null){
|
|
|
+ if (username == null || password == null) {
|
|
|
return ResponseUtil.badArgument();
|
|
|
}
|
|
|
|
|
|
- List<LitemallUser> userList =userService.queryByUsername(username);
|
|
|
+ List<LitemallUser> userList = userService.queryByUsername(username);
|
|
|
LitemallUser user = null;
|
|
|
- if(userList.size() > 1){
|
|
|
+ if (userList.size() > 1) {
|
|
|
return ResponseUtil.serious();
|
|
|
- }
|
|
|
- else if(userList.size() == 0){
|
|
|
+ } else if (userList.size() == 0) {
|
|
|
return ResponseUtil.badArgumentValue();
|
|
|
- }
|
|
|
- else {
|
|
|
+ } else {
|
|
|
user = userList.get(0);
|
|
|
}
|
|
|
|
|
|
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
|
|
|
- if(!encoder.matches(password, user.getPassword())){
|
|
|
+ if (!encoder.matches(password, user.getPassword())) {
|
|
|
return ResponseUtil.fail(403, "账号密码不对");
|
|
|
}
|
|
|
|
|
|
@@ -102,26 +108,26 @@ public class WxAuthController {
|
|
|
* 微信登录
|
|
|
*
|
|
|
* @param wxLoginInfo 请求内容,{ code: xxx, userInfo: xxx }
|
|
|
- * @param request 请求对象
|
|
|
+ * @param request 请求对象
|
|
|
* @return 登录结果
|
|
|
- * 成功则
|
|
|
- * {
|
|
|
- * errno: 0,
|
|
|
- * errmsg: '成功',
|
|
|
- * data:
|
|
|
- * {
|
|
|
- * token: xxx,
|
|
|
- * tokenExpire: xxx,
|
|
|
- * userInfo: xxx
|
|
|
- * }
|
|
|
- * }
|
|
|
- * 失败则 { errno: XXX, errmsg: XXX }
|
|
|
+ * 成功则
|
|
|
+ * {
|
|
|
+ * errno: 0,
|
|
|
+ * errmsg: '成功',
|
|
|
+ * data:
|
|
|
+ * {
|
|
|
+ * token: xxx,
|
|
|
+ * tokenExpire: xxx,
|
|
|
+ * userInfo: xxx
|
|
|
+ * }
|
|
|
+ * }
|
|
|
+ * 失败则 { errno: XXX, errmsg: XXX }
|
|
|
*/
|
|
|
@RequestMapping("login_by_weixin")
|
|
|
public Object loginByWeixin(@RequestBody WxLoginInfo wxLoginInfo, HttpServletRequest request) {
|
|
|
String code = wxLoginInfo.getCode();
|
|
|
UserInfo userInfo = wxLoginInfo.getUserInfo();
|
|
|
- if(code == null || userInfo == null){
|
|
|
+ if (code == null || userInfo == null) {
|
|
|
return ResponseUtil.badArgument();
|
|
|
}
|
|
|
|
|
|
@@ -135,12 +141,12 @@ public class WxAuthController {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
- if(sessionKey == null || openId == null){
|
|
|
+ if (sessionKey == null || openId == null) {
|
|
|
return ResponseUtil.fail();
|
|
|
}
|
|
|
|
|
|
LitemallUser user = userService.queryByOid(openId);
|
|
|
- if(user == null){
|
|
|
+ if (user == null) {
|
|
|
user = new LitemallUser();
|
|
|
user.setUsername(userInfo.getNickName()); // 其实没有用,因为用户没有真正注册
|
|
|
user.setPassword(openId); // 其实没有用,因为用户没有真正注册
|
|
|
@@ -148,15 +154,14 @@ public class WxAuthController {
|
|
|
user.setAvatar(userInfo.getAvatarUrl());
|
|
|
user.setNickname(userInfo.getNickName());
|
|
|
user.setGender(userInfo.getGender());
|
|
|
- user.setUserLevel((byte)0);
|
|
|
- user.setStatus((byte)0);
|
|
|
+ user.setUserLevel((byte) 0);
|
|
|
+ user.setStatus((byte) 0);
|
|
|
user.setLastLoginTime(LocalDateTime.now());
|
|
|
user.setLastLoginIp(IpUtil.client(request));
|
|
|
user.setAddTime(LocalDateTime.now());
|
|
|
|
|
|
userService.add(user);
|
|
|
- }
|
|
|
- else{
|
|
|
+ } else {
|
|
|
user.setLastLoginTime(LocalDateTime.now());
|
|
|
user.setLastLoginIp(IpUtil.client(request));
|
|
|
userService.update(user);
|
|
|
@@ -172,31 +177,49 @@ public class WxAuthController {
|
|
|
return ResponseUtil.ok(result);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 请求验证码
|
|
|
+ *
|
|
|
+ * @param body 手机号码{mobile}
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @PostMapping("regCaptcha")
|
|
|
+ public Object registerCaptcha(@RequestBody String body) {
|
|
|
+ String phoneNumber = JacksonUtil.parseString(body, "mobile");
|
|
|
+ String code = CharUtil.getRandomNum(6);
|
|
|
+
|
|
|
+ notifyService.notifySmsTemplateSync(phoneNumber, NotifyType.CAPTCHA, new String[]{code});
|
|
|
+
|
|
|
+ boolean successful = CaptchaCodeManager.addToCache(phoneNumber, code);
|
|
|
+ return successful ? ResponseUtil.ok() : ResponseUtil.badArgument();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 账号注册
|
|
|
*
|
|
|
- * @param body 请求内容
|
|
|
- * {
|
|
|
- * username: xxx,
|
|
|
- * password: xxx,
|
|
|
- * mobile: xxx
|
|
|
- * code: xxx
|
|
|
- * }
|
|
|
- * 其中code是手机验证码,目前还不支持手机短信验证码
|
|
|
+ * @param body 请求内容
|
|
|
+ * {
|
|
|
+ * username: xxx,
|
|
|
+ * password: xxx,
|
|
|
+ * mobile: xxx
|
|
|
+ * code: xxx
|
|
|
+ * }
|
|
|
+ * 其中code是手机验证码,目前还不支持手机短信验证码
|
|
|
* @param request 请求对象
|
|
|
* @return 登录结果
|
|
|
- * 成功则
|
|
|
- * {
|
|
|
- * errno: 0,
|
|
|
- * errmsg: '成功',
|
|
|
- * data:
|
|
|
- * {
|
|
|
- * token: xxx,
|
|
|
- * tokenExpire: xxx,
|
|
|
- * userInfo: xxx
|
|
|
- * }
|
|
|
- * }
|
|
|
- * 失败则 { errno: XXX, errmsg: XXX }
|
|
|
+ * 成功则
|
|
|
+ * {
|
|
|
+ * errno: 0,
|
|
|
+ * errmsg: '成功',
|
|
|
+ * data:
|
|
|
+ * {
|
|
|
+ * token: xxx,
|
|
|
+ * tokenExpire: xxx,
|
|
|
+ * userInfo: xxx
|
|
|
+ * }
|
|
|
+ * }
|
|
|
+ * 失败则 { errno: XXX, errmsg: XXX }
|
|
|
*/
|
|
|
@PostMapping("register")
|
|
|
public Object register(@RequestBody String body, HttpServletRequest request) {
|
|
|
@@ -205,22 +228,27 @@ public class WxAuthController {
|
|
|
String mobile = JacksonUtil.parseString(body, "mobile");
|
|
|
String code = JacksonUtil.parseString(body, "code");
|
|
|
|
|
|
- if(username == null || password == null || mobile == null || code == null){
|
|
|
+ if (username == null || password == null || mobile == null || code == null) {
|
|
|
return ResponseUtil.badArgument();
|
|
|
}
|
|
|
|
|
|
List<LitemallUser> userList = userService.queryByUsername(username);
|
|
|
- if(userList.size() > 0){
|
|
|
+ if (userList.size() > 0) {
|
|
|
return ResponseUtil.fail(403, "用户名已注册");
|
|
|
}
|
|
|
|
|
|
userList = userService.queryByMobile(mobile);
|
|
|
- if(userList.size() > 0){
|
|
|
+ if (userList.size() > 0) {
|
|
|
return ResponseUtil.fail(403, "手机号已注册");
|
|
|
}
|
|
|
- if(!RegexUtil.isMobileExact(mobile)){
|
|
|
+ if (!RegexUtil.isMobileExact(mobile)) {
|
|
|
return ResponseUtil.fail(403, "手机号格式不正确");
|
|
|
}
|
|
|
+ //判断验证码是否正确
|
|
|
+ String cacheCode = CaptchaCodeManager.getCachedCaptcha(mobile);
|
|
|
+ if (cacheCode == null || cacheCode.isEmpty() || !cacheCode.equals(code))
|
|
|
+ return ResponseUtil.fail(403, "验证码错误");
|
|
|
+
|
|
|
LitemallUser user = new LitemallUser();
|
|
|
|
|
|
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
|
|
|
@@ -234,9 +262,9 @@ public class WxAuthController {
|
|
|
user.setWeixinOpenid("");
|
|
|
user.setAvatar("https://yanxuan.nosdn.127.net/80841d741d7fa3073e0ae27bf487339f.jpg?imageView&quality=90&thumbnail=64x64");
|
|
|
user.setNickname(username);
|
|
|
- user.setGender((byte)0);
|
|
|
- user.setUserLevel((byte)0);
|
|
|
- user.setStatus((byte)0);
|
|
|
+ user.setGender((byte) 0);
|
|
|
+ user.setUserLevel((byte) 0);
|
|
|
+ user.setStatus((byte) 0);
|
|
|
user.setLastLoginTime(LocalDateTime.now());
|
|
|
user.setLastLoginIp(IpUtil.client(request));
|
|
|
user.setAddTime(LocalDateTime.now());
|
|
|
@@ -261,17 +289,17 @@ public class WxAuthController {
|
|
|
/**
|
|
|
* 账号密码重置
|
|
|
*
|
|
|
- * @param body 请求内容
|
|
|
- * {
|
|
|
- * password: xxx,
|
|
|
- * mobile: xxx
|
|
|
- * code: xxx
|
|
|
- * }
|
|
|
- * 其中code是手机验证码,目前还不支持手机短信验证码
|
|
|
+ * @param body 请求内容
|
|
|
+ * {
|
|
|
+ * password: xxx,
|
|
|
+ * mobile: xxx
|
|
|
+ * code: xxx
|
|
|
+ * }
|
|
|
+ * 其中code是手机验证码,目前还不支持手机短信验证码
|
|
|
* @param request 请求对象
|
|
|
* @return 登录结果
|
|
|
- * 成功则 { errno: 0, errmsg: '成功' }
|
|
|
- * 失败则 { errno: XXX, errmsg: XXX }
|
|
|
+ * 成功则 { errno: 0, errmsg: '成功' }
|
|
|
+ * 失败则 { errno: XXX, errmsg: XXX }
|
|
|
*/
|
|
|
@PostMapping("reset")
|
|
|
public Object reset(@RequestBody String body, HttpServletRequest request) {
|
|
|
@@ -279,22 +307,26 @@ public class WxAuthController {
|
|
|
String mobile = JacksonUtil.parseString(body, "mobile");
|
|
|
String code = JacksonUtil.parseString(body, "code");
|
|
|
|
|
|
- if(mobile == null || code == null || password == null){
|
|
|
+ if (mobile == null || code == null || password == null) {
|
|
|
return ResponseUtil.badArgument();
|
|
|
}
|
|
|
|
|
|
+ //判断验证码是否正确
|
|
|
+ String cacheCode = CaptchaCodeManager.getCachedCaptcha(mobile);
|
|
|
+ if (cacheCode == null || cacheCode.isEmpty() || !cacheCode.equals(code))
|
|
|
+ return ResponseUtil.fail(403, "验证码错误");
|
|
|
+
|
|
|
List<LitemallUser> userList = userService.queryByMobile(mobile);
|
|
|
LitemallUser user = null;
|
|
|
- if(userList.size() > 1){
|
|
|
+ if (userList.size() > 1) {
|
|
|
return ResponseUtil.serious();
|
|
|
- }
|
|
|
- else if(userList.size() == 0){
|
|
|
+ } else if (userList.size() == 0) {
|
|
|
return ResponseUtil.fail(403, "手机号未注册");
|
|
|
- }
|
|
|
- else{
|
|
|
+ } else {
|
|
|
user = userList.get(0);
|
|
|
}
|
|
|
|
|
|
+ // TODO 重新生成的密码无法登陆
|
|
|
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
|
|
|
String encodedPassword = encoder.encode(password);
|
|
|
user.setPassword(encodedPassword);
|