feat(auth): 实现用户头像修改次数限制功能
- 在Member实体中添加avatarModifyCount和avatarModifyYear字段用于统计本年头像修改次数 - 在上传头像接口中实现头像修改次数检查,限制每年最多修改2次 - 更新用户信息时增加头像修改次数统计逻辑 - 修改createByMobile方法参数,移除不必要的用户信息参数 - 在MemberDTO中添加avatarModifyRemainCount字段显示剩余修改次数 - 添加数据库表结构变更SQL脚本 - 移除已废弃的手机号注册和微信登录相关代码 - 移除BindMobileDTO中的冗余字段定义
This commit is contained in:
@@ -44,16 +44,17 @@ public class LoginOrRegisterController extends BaseApiController {
|
||||
* @param address
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = "/member/register" , method = RequestMethod.POST)
|
||||
public ResponseDTO register(@RequestParam("mobile")String mobile,@RequestParam("captcha")String captcha,
|
||||
@RequestParam(value = "name",required = false)String name,
|
||||
@RequestParam(value = "sex",required = false)Integer sex,
|
||||
@RequestParam(value = "age",required = false)Integer age,
|
||||
@RequestParam(value = "address",required = false)String address
|
||||
){
|
||||
MemberTokenDTO memberTokenDTO = loginRegisterService.registerByMobile(mobile, captcha, name, sex, age , address);
|
||||
return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO);
|
||||
}
|
||||
// @RequestMapping(value = "/member/register" , method = RequestMethod.POST)
|
||||
// @Deprecated
|
||||
// public ResponseDTO register(@RequestParam("mobile")String mobile,@RequestParam("captcha")String captcha,
|
||||
// @RequestParam(value = "name",required = false)String name,
|
||||
// @RequestParam(value = "sex",required = false)Integer sex,
|
||||
// @RequestParam(value = "age",required = false)Integer age,
|
||||
// @RequestParam(value = "address",required = false)String address
|
||||
// ){
|
||||
// MemberTokenDTO memberTokenDTO = loginRegisterService.registerByMobile(mobile, captcha, name, sex, age , address);
|
||||
// return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO);
|
||||
// }
|
||||
|
||||
/**
|
||||
* 手机号和验证码登录
|
||||
@@ -72,12 +73,13 @@ public class LoginOrRegisterController extends BaseApiController {
|
||||
@Deprecated
|
||||
public ResponseDTO loginWx(@RequestParam("code") String code, @RequestParam("nickname") String nickname,
|
||||
@RequestParam("avatar") String avatar){
|
||||
String openId = wechatService.getXcxOpenId(code); //查询openId:
|
||||
MemberTokenDTO memberTokenDTO = loginRegisterService.loginWithXcx(openId,nickname,avatar);
|
||||
|
||||
// memberTokenDTO为null则跳绑定手机页面
|
||||
return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO)
|
||||
.addAttribute("information",loginRegisterService.info(avatar,nickname,openId));
|
||||
// String openId = wechatService.getXcxOpenId(code); //查询openId:
|
||||
// MemberTokenDTO memberTokenDTO = loginRegisterService.loginWithXcx(openId,nickname,avatar);
|
||||
//
|
||||
// // memberTokenDTO为null则跳绑定手机页面
|
||||
// return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO)
|
||||
// .addAttribute("information",loginRegisterService.info(avatar,nickname,openId));
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
package com.sv.api.controller;
|
||||
|
||||
import com.sv.api.service.impl.LoginRegisterServiceImpl;
|
||||
import com.sv.entity.Member;
|
||||
import com.sv.service.api.MemberService;
|
||||
import com.sv.service.common.OSSClientUtil;
|
||||
import com.ydd.framework.core.annotation.AccessToken;
|
||||
import com.ydd.framework.core.common.dto.ResponseDTO;
|
||||
import com.ydd.framework.core.controller.BaseApiController;
|
||||
import com.ydd.framework.core.exception.ServiceException;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@@ -21,11 +24,23 @@ public class UploadController extends BaseApiController {
|
||||
private OSSClientUtil ossClientUtil;
|
||||
@Resource
|
||||
private LoginRegisterServiceImpl loginRegisterService;
|
||||
@Resource
|
||||
private MemberService memberService;
|
||||
|
||||
@RequestMapping("/upload/avatar")
|
||||
@AccessToken
|
||||
public ResponseDTO uploadImg(@RequestParam("image") MultipartFile file) throws IOException {
|
||||
Integer loginMemberId = getLoginMemberId();
|
||||
Member member = memberService.findById(loginMemberId);
|
||||
// 检查头像修改次数限制
|
||||
int currentYear = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
|
||||
Integer modifyCount = member.getAvatarModifyCount();
|
||||
Integer modifyYear = member.getAvatarModifyYear();
|
||||
if (modifyYear != null && modifyYear == currentYear) {
|
||||
if (modifyCount != null && modifyCount >= 2) {
|
||||
throw new ServiceException("本年头像修改次数已达上限(2次)");
|
||||
}
|
||||
}
|
||||
String imgUrl = ossClientUtil.uploadImg(file);
|
||||
loginRegisterService.updateInformation(loginMemberId,null,imgUrl);
|
||||
return ResponseDTO.ok();
|
||||
|
||||
@@ -69,37 +69,37 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
/**
|
||||
* 手机号注册
|
||||
*/
|
||||
@Transactional
|
||||
@Deprecated
|
||||
public MemberTokenDTO registerByMobile(String mobile,String captcha,String name,Integer sex,Integer age,String address){
|
||||
ValidationUtils.assertNotBlank(mobile, "请输入手机号码");
|
||||
VenueValidateUtils.assertMobile(mobile);
|
||||
ValidationUtils.assertNotNull(captcha);
|
||||
|
||||
// 校验验证码是否正确
|
||||
captchaCacheService.assertCaptcha(mobile, ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX, captcha);
|
||||
MemberTokenDTO memberTokenDTO = null;
|
||||
synchronized (mobile){
|
||||
// 根据手机号码创建新用户
|
||||
Member member = memberService.createByMobile(mobile,name,sex,age,address,PlatformContext.getValue());
|
||||
|
||||
// 删除验证码
|
||||
captchaCacheService.remove(mobile, ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX);
|
||||
|
||||
// 查询认证
|
||||
MemberAuth memberAuth = memberAuthService.findByMobile(mobile);
|
||||
if (memberAuth == null){
|
||||
// 创建用户登录认证
|
||||
memberAuth = memberAuthService.createByMobile(member.getId(),member.getPlatformId(),mobile);
|
||||
}
|
||||
|
||||
// 查询访问凭证,并强制更新
|
||||
memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE);
|
||||
}
|
||||
|
||||
|
||||
return memberTokenDTO;
|
||||
}
|
||||
// @Transactional
|
||||
// @Deprecated
|
||||
// public MemberTokenDTO registerByMobile(String mobile,String captcha,String name,Integer sex,Integer age,String address){
|
||||
// ValidationUtils.assertNotBlank(mobile, "请输入手机号码");
|
||||
// VenueValidateUtils.assertMobile(mobile);
|
||||
// ValidationUtils.assertNotNull(captcha);
|
||||
//
|
||||
// // 校验验证码是否正确
|
||||
// captchaCacheService.assertCaptcha(mobile, ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX, captcha);
|
||||
// MemberTokenDTO memberTokenDTO = null;
|
||||
// synchronized (mobile){
|
||||
// // 根据手机号码创建新用户
|
||||
// Member member = memberService.createByMobile(mobile,name,sex,age,address,PlatformContext.getValue());
|
||||
//
|
||||
// // 删除验证码
|
||||
// captchaCacheService.remove(mobile, ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX);
|
||||
//
|
||||
// // 查询认证
|
||||
// MemberAuth memberAuth = memberAuthService.findByMobile(mobile);
|
||||
// if (memberAuth == null){
|
||||
// // 创建用户登录认证
|
||||
// memberAuth = memberAuthService.createByMobile(member.getId(),member.getPlatformId(),mobile);
|
||||
// }
|
||||
//
|
||||
// // 查询访问凭证,并强制更新
|
||||
// memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// return memberTokenDTO;
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
@@ -135,22 +135,23 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
/**
|
||||
* 微信快捷登录
|
||||
*/
|
||||
public MemberTokenDTO loginWithXcx(String openId,String nickname, String avatar){
|
||||
|
||||
MemberTokenDTO memberTokenDTO = null;
|
||||
synchronized (openId){
|
||||
// 判断用户是否注册过,用微信登录过
|
||||
MemberAuth memberAuth = memberAuthService.findByAuthId(openId);
|
||||
// 登录过,则直接登录成功
|
||||
if (memberAuth != null){
|
||||
// 查询访问凭证,并强制更新
|
||||
memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE);
|
||||
// 修改用户图像
|
||||
updateInformation(memberAuth.getMemberId(),nickname,avatar);
|
||||
}
|
||||
}
|
||||
return memberTokenDTO;
|
||||
}
|
||||
// @Deprecated
|
||||
// public MemberTokenDTO loginWithXcx(String openId,String nickname, String avatar){
|
||||
//
|
||||
// MemberTokenDTO memberTokenDTO = null;
|
||||
// synchronized (openId){
|
||||
// // 判断用户是否注册过,用微信登录过
|
||||
// MemberAuth memberAuth = memberAuthService.findByAuthId(openId);
|
||||
// // 登录过,则直接登录成功
|
||||
// if (memberAuth != null){
|
||||
// // 查询访问凭证,并强制更新
|
||||
// memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE);
|
||||
// // 修改用户图像
|
||||
// updateInformation(memberAuth.getMemberId(),nickname,avatar);
|
||||
// }
|
||||
// }
|
||||
// return memberTokenDTO;
|
||||
// }
|
||||
|
||||
/**
|
||||
* 已用手机号登录,支付,再跳转微信登录
|
||||
@@ -188,7 +189,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
}
|
||||
|
||||
// 修改用户图像
|
||||
updateInformation(memberId,nickname,avatar);
|
||||
// updateInformation(memberId,nickname,avatar);
|
||||
|
||||
// 查询访问凭证,并强制更新
|
||||
memberTokenDTO = memberTokenService.findDTOByMemberId(memberId, Boolean.TRUE);
|
||||
@@ -306,31 +307,31 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
/**
|
||||
* 更新用户信息
|
||||
*/
|
||||
@Transactional
|
||||
public Member updateMember(Member member,BindMobileDTO bindMobileDTO){
|
||||
member.setAvatar(bindMobileDTO.getAvatar());
|
||||
member.setNickname(bindMobileDTO.getNickname());
|
||||
member.setMobile(bindMobileDTO.getMobile());
|
||||
if (bindMobileDTO.getName() != null){
|
||||
member.setName(bindMobileDTO.getName());
|
||||
}
|
||||
if (bindMobileDTO.getSex() != null){
|
||||
member.setSex(bindMobileDTO.getSex());
|
||||
}
|
||||
if (bindMobileDTO.getAge() != null){
|
||||
member.setAge(bindMobileDTO.getAge());
|
||||
}
|
||||
if (bindMobileDTO.getAddress() != null){
|
||||
member.setAddress(bindMobileDTO.getAddress());
|
||||
}
|
||||
try {
|
||||
// member.setAvatar(updateWxImgToOss(bindMobileDTO.getAvatar()));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
memberService.update(member);
|
||||
return member;
|
||||
}
|
||||
// @Transactional
|
||||
// public Member updateMember(Member member,BindMobileDTO bindMobileDTO){
|
||||
// member.setAvatar(bindMobileDTO.getAvatar());
|
||||
// member.setNickname(bindMobileDTO.getNickname());
|
||||
// member.setMobile(bindMobileDTO.getMobile());
|
||||
// if (bindMobileDTO.getName() != null){
|
||||
// member.setName(bindMobileDTO.getName());
|
||||
// }
|
||||
// if (bindMobileDTO.getSex() != null){
|
||||
// member.setSex(bindMobileDTO.getSex());
|
||||
// }
|
||||
// if (bindMobileDTO.getAge() != null){
|
||||
// member.setAge(bindMobileDTO.getAge());
|
||||
// }
|
||||
// if (bindMobileDTO.getAddress() != null){
|
||||
// member.setAddress(bindMobileDTO.getAddress());
|
||||
// }
|
||||
// try {
|
||||
//// member.setAvatar(updateWxImgToOss(bindMobileDTO.getAvatar()));
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// memberService.update(member);
|
||||
// return member;
|
||||
// }
|
||||
|
||||
/**
|
||||
* 退出登录
|
||||
@@ -363,10 +364,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
synchronized (openId.intern()){
|
||||
Member member = memberService.findByMobile(mobile);
|
||||
if (member == null) {
|
||||
member = memberService.createByMobile(mobile, bindMobileDTO.getNickname(),
|
||||
bindMobileDTO.getSex(), bindMobileDTO.getAge(), bindMobileDTO.getAddress(), value);
|
||||
updateInformation(member.getId(), bindMobileDTO.getNickname(), bindMobileDTO.getAvatar());
|
||||
|
||||
member = memberService.createByMobile(mobile, value);
|
||||
MemberAuth memberAuth = memberAuthService.findByMobile(mobile);
|
||||
if (memberAuth == null) {
|
||||
memberAuth = memberAuthService.createByMobileByOpenId(member.getId(), member.getPlatformId(), mobile, openId);
|
||||
@@ -389,7 +387,6 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
} else {
|
||||
throw new ServiceException("该手机号已被其他微信账号绑定");
|
||||
}
|
||||
updateInformation(member.getId(), bindMobileDTO.getNickname(), bindMobileDTO.getAvatar());
|
||||
}
|
||||
}
|
||||
return memberTokenDTO;
|
||||
@@ -407,12 +404,22 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
|
||||
if (nickname != null){
|
||||
member.setNickname(nickname);
|
||||
}
|
||||
member.setAvatar(avatar);
|
||||
try {
|
||||
// member.setAvatar(updateWxImgToOss(avatar));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
// 如果更新了头像,增加修改次数
|
||||
if (avatar != null && !avatar.equals(member.getAvatar())) {
|
||||
int currentYear = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
|
||||
Integer modifyCount = member.getAvatarModifyCount();
|
||||
Integer modifyYear = member.getAvatarModifyYear();
|
||||
|
||||
if (modifyYear == null || modifyYear != currentYear) {
|
||||
member.setAvatarModifyCount(1);
|
||||
member.setAvatarModifyYear(currentYear);
|
||||
} else {
|
||||
member.setAvatarModifyCount((modifyCount == null ? 0 : modifyCount) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
member.setAvatar(avatar);
|
||||
memberService.update(member);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user