Browse Source

修改用户信息逻辑调整

wangmh 8 years ago
parent
commit
8943008d86

+ 82 - 63
sso-server/src/main/java/com/uas/sso/controller/UpdateUserController.java

@@ -10,13 +10,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
-import static com.alibaba.fastjson.JSON.parseArray;
 
 /**
  * @author wangmh
@@ -33,7 +32,7 @@ public class UpdateUserController extends BaseController {
     /**
      * 校验信息token有效期
      */
-    private static final int EXPIRES = 7*24*60*60;
+    private static final int EXPIRES = 10 * 60;
 
     /**
      * 获取可以校验方式
@@ -108,7 +107,7 @@ public class UpdateUserController extends BaseController {
 
         // 设置返回数据
         User user = userService.findByMobile(mobile);
-        existToken = new Token(user, EXPIRES);
+        existToken = new Token(user.getUserUU(), EXPIRES);
         tokenService.save(existToken);
         return success(existToken.getId());
     }
@@ -130,17 +129,23 @@ public class UpdateUserController extends BaseController {
         User user = userService.findByUsername(email);
 
         // 设置发送邮件信息
-        Token token = new Token(user, EXPIRES);
+        Token token = new Token(user.getUserUU(), EXPIRES);
         tokenService.save(token);
         ModelMap data = new ModelMap();
         data.put("vipName", user.getVipName());
         // TODO 邮件认证地址
-        if ("mobile".equals(operate)) {
-            data.put("url", "http://192.168.253.66:8081/update/user/setMobile?token=" + token);
-        } else if ("email".equals(operate)) {
-            data.put("url", "http://192.168.253.66:8081/update/user/setMail?token=" + token);
-        } else if ("question".equals(operate)) {
-            data.put("url", "http://192.168.253.66:8081/update/user/setQuestion?token=" + token);
+        switch (operate) {
+            case "mobile":
+                data.put("url", "http://192.168.253.118:3001/validation/phoneValidationSecondStep?token=" + token.getId());
+                break;
+            case "email":
+                data.put("url", "http://192.168.253.118:3001/validation/emailValidationSecondStep?token=" + token.getId());
+                break;
+            case "question":
+                data.put("url", "http://192.168.253.118:3001/validation/phoneValidationSecondStep?token=" + token.getId());
+                break;
+            default:
+                return error("参数错误");
         }
 
         // 发送邮件
@@ -177,7 +182,7 @@ public class UpdateUserController extends BaseController {
         }
 
         // 返回token
-        Token expireToken = new Token(user, EXPIRES);
+        Token expireToken = new Token(user.getUserUU(), EXPIRES);
         tokenService.save(expireToken);
         ModelMap data = new ModelMap();
         data.put("token", expireToken.getId());
@@ -199,11 +204,12 @@ public class UpdateUserController extends BaseController {
             return error("请求超时");
         }
 
-        // 拿出user放入session中
-        User user = (User) existToken.getBind();
-        if (user == null) {
+        // 拿出userUU,并删除token
+        if (existToken.getBind() == null || !(existToken.getBind() instanceof Long)) {
             return error("请求错误");
         }
+        Long userUU = (Long) existToken.getBind();
+        User user = userService.findOne(userUU);
 
         // 获取验证码
         token = getMobileToken(mobile);
@@ -276,64 +282,72 @@ public class UpdateUserController extends BaseController {
             return error("请求超时");
         }
 
-        // 拿出user放入session中
-        User user = (User) existToken.getBind();
-        if (user == null) {
+        // 校验空参数
+        if (StringUtils.isEmpty(email)) {
+            return error("邮箱不能为空");
+        }
+
+        // 拿出userUU,并删除token
+        if (existToken.getBind() == null || !(existToken.getBind() instanceof Long)) {
             return error("请求错误");
         }
+        Long userUU = (Long) existToken.getBind();
+        User user = userService.findOne(userUU);
         tokenService.delete(token);
 
-        // 获取验证码
-        token = getEmailToken(email);
+        // 设置发送邮件信息
+        Map<String, Object> tokenMap = new HashMap<>(2);
+        tokenMap.put("userUU", userUU);
+        tokenMap.put("newEmail", email);
+        Token returnToken = new Token(tokenMap, EXPIRES);
+        tokenService.save(returnToken);
+        ModelMap data = new ModelMap();
+        data.put("vipName", user.getVipName());
+        // TODO 邮件认证地址
+        data.put("url", "http://192.168.253.118:3001/update/user/email?token=" + returnToken.getId());
 
-        request.getSession().setAttribute("user", user);
-        return success(new ModelMap("token", token));
+        // 发送邮件
+        if (!StringUtils.isEmpty(email)) {
+            Setting mailTplId = settingService.findOne("templateForSendMailWhenResetPassword");
+            if (!StringUtils.isEmpty(mailTplId)) {
+                mailService.send(mailTplId.getValue(), email, data);
+            }
+        }
+        return success();
     }
 
+
     /**
      * 设置邮箱
      *
      * @author wangmh
      * @date 2018/1/11 21:15
-     * @param email 邮箱
-     * @param code 验证码
-     * @param token 验证码tokenId
+     * @param token 验证tokenId
      * @return
      */
-    @RequestMapping(value = "/setEmail", method = RequestMethod.POST)
-    public ModelMap updateEmail(String email, String code, @RequestParam String token) {
-        // 校验空参数
-        if (StringUtils.isEmpty(email)) {
-            return error("邮箱不能为空");
-        }
-        if (StringUtils.isEmpty(code)) {
-            return error("验证码不能为空");
-        }
-
-        // 从session中获取用户信息
-        User user = (User) request.getSession().getAttribute("user");
-        if (user == null) {
-            return error("请求超时,请刷新重试");
+    @RequestMapping(value = "/email", method = RequestMethod.GET)
+    public ModelAndView updateEmail(@RequestParam String token) {
+        // 校验token
+        Token existToken = tokenService.findOne(token);
+        if (existToken == null || existToken.isExpired()) {
+            // token过期,跳转到失败页面
+            return new ModelAndView("redirect:http://192.168.253.118:3001/validation/validFail");
         }
 
-        // 校验邮箱是否被使用
-        if (userService.emailHasRegistered(email)){
-            return error("邮箱已注册");
+        // 拿出userUU,并删除token
+        if (existToken.getBind() == null || !(existToken.getBind() instanceof Map)) {
+            // token错误,跳转到失败页面
+            return new ModelAndView("redirect:http://192.168.253.118:3001/validation/validFail");
         }
+        Map<String, Object> data = (Map) existToken.getBind();
+        Long userUU = (Long) data.get("userUU");
+        String newEmail = (String) data.get("newEmail");
 
-        // 校验token
-        Token existToken = tokenService.findOne(token);
-        if (existToken == null) {
-            return error("请重新获取验证码");
-        }
+        userService.updateEmail(userUU, newEmail);
 
-        // 校验验证码
-        checkEmailCode(token, email, code);
+        // 删除token
         tokenService.delete(token);
-
-        // 修改邮箱
-        userService.updateEmail(user.getUserUU(), email);
-        return success();
+        return new ModelAndView("redirect:http://192.168.253.118:3001/validation/emailValidationThirdStep");
     }
 
     @RequestMapping(value = "/setQuestion", method = RequestMethod.POST)
@@ -367,16 +381,21 @@ public class UpdateUserController extends BaseController {
     @RequestMapping(value = "/checkCode/{type}", method = RequestMethod.POST)
     public ModelMap checkCode(@PathVariable String type, @RequestParam String token, String code, String mobile, String email) {
         // 校验验证码
-        if ("mobile".equals(type)) {
-            if (StringUtils.isEmpty(mobile)) {
-                return error("手机号不能为空");
-            }
-            checkMobileCode(token, mobile, code);
-        } else if ("email".equals(type)) {
-            if (StringUtils.isEmpty(email)) {
-                return error("邮箱不能为空");
-            }
-            checkEmailCode(token, email, code);
+        switch (type) {
+            case "mobile":
+                if (StringUtils.isEmpty(mobile)) {
+                    return error("手机号不能为空");
+                }
+                checkMobileCode(token, mobile, code);
+                break;
+            case "email":
+                if (StringUtils.isEmpty(email)) {
+                    return error("邮箱不能为空");
+                }
+                checkEmailCode(token, email, code);
+                break;
+            default:
+                return error("参数错误");
         }
 
         return success();