package world.xuewei.controller;
import cn.hutool.core.util.StrUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import world.xuewei.dto.RespResult;
import world.xuewei.entity.User;
import world.xuewei.utils.Assert;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 登录控制器
*
* ==========================================================================
* 郑重说明:本项目免费开源!原创作者为:薛伟同学,严禁私自出售。
* ==========================================================================
* B站账号:薛伟同学
* 微信公众号:薛伟同学
* 作者博客:http://xuewei.world
* ==========================================================================
* 陆陆续续总会收到粉丝的提醒,总会有些人为了赚取利益倒卖我的开源项目。
* 不乏有粉丝朋友出现钱付过去,那边只把代码发给他就跑路的,最后还是根据线索找到我。。
* 希望各位朋友擦亮慧眼,谨防上当受骗!
* ==========================================================================
*
* @author XUEW
*/
@RestController
@RequestMapping(value = "login")
public class LoginController extends BaseController {
/**
* 注册
*/
@PostMapping("/register")
public RespResult register(User user, String code) {
String email = user.getUserEmail();
if (Assert.isEmpty(email)) {
return RespResult.fail("邮箱不能为空");
}
Map codeData = (Map) session.getAttribute("EMAIL_CODE" + email);
if (codeData == null) {
return RespResult.fail("尚未发送验证码");
}
String sentCode = (String) codeData.get("code");
Calendar calendar = Calendar.getInstance();
calendar.setTime((Date) codeData.get("time"));
calendar.add(Calendar.MINUTE, 5);
if (System.currentTimeMillis() > calendar.getTime().getTime()) {
session.removeAttribute("EMAIL_CODE" + email);
return RespResult.fail("验证码已经超时");
}
if (!sentCode.equals(code)) {
return RespResult.fail("验证码错误");
}
List query = userService.query(User.builder().userAccount(user.getUserAccount()).build());
if (Assert.notEmpty(query)) {
return RespResult.fail("账户已被注册");
}
user.setRoleStatus(0);
user.setImgPath("https://moti-cloud-v2.oss-cn-beijing.aliyuncs.com/Snipaste_2022-05-01_15-37-01.png");
user = userService.save(user);
session.setAttribute("loginUser", user);
return RespResult.success("注册成功", user);
}
/**
* 登录
*/
@PostMapping("/login")
public RespResult login(User user) {
List users = userService.query(user);
if (Assert.notEmpty(users)) {
session.setAttribute("loginUser", users.get(0));
return RespResult.success("登录成功");
}
if (Assert.isEmpty(userService.query(User.builder().userAccount(user.getUserAccount()).build()))) {
return RespResult.fail("账户尚未注册");
}
return RespResult.fail("密码错误");
}
/**
* 发送邮箱验证码
*/
@PostMapping("/sendEmailCode")
public RespResult sendEmailCode(String email, Map map) {
if (StrUtil.isEmpty(email)) {
return RespResult.fail("邮箱不可为空");
}
// 发送验证码
String verifyCode = emailClient.sendEmailCode(email);
map.put("email", email);
map.put("code", verifyCode);
map.put("time", new Date());
session.setAttribute("EMAIL_CODE" + email, map);
return RespResult.success("发送成功");
}
}