Browse Source

用户模块 增加解绑逻辑

songfuqiang 2 years ago
parent
commit
656b3fbb02

+ 2 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/MembersController.java

@@ -152,7 +152,8 @@ public class MembersController {
      */
     @PostMapping("/unbindAccount")
     public AppResultMap<BindAccountVo> unbindAccount(@RequestBody AppRequestParam<BindAccountParam> param){
-        return null;
+        BindAccountVo bindAccountVo = memberService.unbindAccount(param.getData());
+        return new AppResultMap<>(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,bindAccountVo);
     }
 
 }

+ 8 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/SocialAccountService.java

@@ -44,4 +44,12 @@ public interface SocialAccountService {
      * @param param 绑定参数
      */
     String bindSocialAccount(Members member, BindAccountParam param);
+
+    /**
+     * 解绑账号
+     * @param currentUser 当前用户
+     * @param param 绑定参数
+     * @return socialAccount的id
+     */
+    String unbindSocialAccount(Members currentUser, BindAccountParam param);
 }

+ 21 - 17
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AuthServiceImpl.java

@@ -126,14 +126,6 @@ public class AuthServiceImpl implements AuthService {
         Members members = userService.getById(userId);
         Set<SimpleGrantedAuthority> authorities = new LinkedHashSet<>();
         String account = members.getId();
-//        if(!StringUtils.isEmpty(members.getPhone())){
-//            account = members.getPhone();
-//        }else if(!StringUtils.isEmpty(members.getEmail())){
-//            account = members.getEmail();
-//        } else{
-//            SocialAccounts socialAccount = socialAccountService.selectByMemberId(userId);
-//            account = socialAccount.getAccountId();
-//        }
         CustomUserDetails principal = new CustomUserDetails(members.getId(),
                 account,
                 members.getPasswordDigest(),
@@ -293,15 +285,27 @@ public class AuthServiceImpl implements AuthService {
             Members member = userService.getByAccount(attribute.getAccount());
             String mobileRegex = CommonConstant.mobileRegex;
             //如果members为空并且account为手机号,新增一条members数据;邮箱不支持注册,只允许输入账号密码登录
-            if(ObjectUtils.isEmpty(member) && account.matches(mobileRegex)){
-                member.setName(String.valueOf(System.currentTimeMillis()).substring(0, 10));
-                memberId = memberService.insertMembers(member, password);
-                memberVo.setName(member.getName());
-                memberVo.setEmail(member.getEmail());
-                memberVo.setPhone(member.getPhone());
-                memberVo.setPhoneZone(member.getPhoneZone());
-                memberVo.setTimeZone(member.getTimeZone());
-                memberVo.setAvatarUrl("");
+            if(account.matches(mobileRegex)){
+                if(ObjectUtils.isEmpty(member)) {
+                    member.setName(String.valueOf(System.currentTimeMillis()).substring(0, 10));
+                    memberId = memberService.insertMembers(member, password);
+                    memberVo.setName(member.getName());
+                    memberVo.setEmail(member.getEmail());
+                    memberVo.setPhone(member.getPhone());
+                    memberVo.setPhoneZone(member.getPhoneZone());
+                    memberVo.setTimeZone(member.getTimeZone());
+                    memberVo.setAvatarUrl("");
+                }else {
+                    if("false".equals(password)){
+                        memberVo.setName(member.getName());
+                        memberVo.setEmail(member.getEmail());
+                        memberVo.setPhone(member.getPhone());
+                        memberVo.setPhoneZone(member.getPhoneZone());
+                        memberVo.setAvatarUrl("");
+                        memberVo.setTimeZone(member.getTimeZone());
+                        memberId = member.getId();
+                    }
+                }
             }else {
                 //如果用户存在将用户id返回,否则其他情况(邮箱登录)全部抛异常:用户未注册
                 if (ObjectUtils.isNotEmpty(member)) {

+ 25 - 8
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MemberServiceImpl.java

@@ -486,7 +486,6 @@ public class MemberServiceImpl implements MemberService {
         return memberId;
     }
 
-    //todo 先做绑定第三方账号
     @Override
     @Transactional(rollbackFor = BackendRuntimeException.class)
     public BindAccountVo bindAccount(BindAccountParam param) {
@@ -496,6 +495,8 @@ public class MemberServiceImpl implements MemberService {
         Members currentUser = getCurrentUser();
         BeanUtils.copyProperties(currentUser,memberVo);
         memberVo.setStatus("verified");
+        bindAccountVo.setMember(memberVo);
+
         String provider = param.getProvider();
         if("phone".equals(provider)){
             String phone = param.getPhone();
@@ -534,18 +535,34 @@ public class MemberServiceImpl implements MemberService {
         } else{
             //绑定第三方账号
             String accountId = socialAccountService.bindSocialAccount(currentUser,param);
+            SocialAccounts socialAccounts = socialAccountService.selectByAccountId(accountId);
+            BeanUtils.copyProperties(socialAccounts,socialAccountVo);
+            bindAccountVo.setSocialAccount(socialAccountVo);
         }
-
-        SocialAccounts socialAccounts = socialAccountService.selectByMemberId(currentUser.getId(), ProviderEnum.getCodeByName(provider));
-        BeanUtils.copyProperties(socialAccounts,socialAccountVo);
-
-        bindAccountVo.setMember(memberVo);
-        bindAccountVo.setSocialAccount(socialAccountVo);
         return bindAccountVo;
     }
 
     @Override
     public BindAccountVo unbindAccount(BindAccountParam param) {
-        return null;
+        BindAccountVo bindAccountVo = new BindAccountVo();
+        MemberVo memberVo = new MemberVo();
+        SocialAccountVo accountVo = new SocialAccountVo();
+
+        Members currentUser = getCurrentUser();
+        BeanUtils.copyProperties(currentUser,memberVo);
+        memberVo.setStatus("verified");
+        bindAccountVo.setMember(memberVo);
+
+        String provider = param.getProvider();
+        if("phone".equals(provider)){
+            currentUser.setPhone("");
+            update(currentUser);
+        } else {
+            String accountId = socialAccountService.unbindSocialAccount(currentUser,param);
+            SocialAccounts socialAccounts = socialAccountService.selectByAccountId(accountId);
+            BeanUtils.copyProperties(socialAccounts,accountVo);
+            bindAccountVo.setSocialAccount(accountVo);
+        }
+        return bindAccountVo;
     }
 }

+ 24 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/SocialAccountServiceImpl.java

@@ -122,4 +122,28 @@ public class SocialAccountServiceImpl implements SocialAccountService {
         socialAccount.setUpdatedAt(new Date());
         socialAccountsMapper.updateByExample(socialAccount,example);
     }
+
+    @Override
+    public String unbindSocialAccount(Members currentUser, BindAccountParam param) {
+        String accountId = "";
+        String accessToken = param.getAccessToken();
+        String openid = param.getOpenid();
+        String provider = param.getProvider();
+        SocialAccountsExample example = new SocialAccountsExample();
+        if(ProviderEnum.TENCENT.getName().equals(provider)){
+            Tencent userInfo = TencentUtils.getUserInfo(accessToken);
+            String unionId = userInfo.getUnionId();
+            accountId = unionId;
+            example.createCriteria().andAccountIdEqualTo(unionId);
+            socialAccountsMapper.deleteByExample(example);
+        } else {
+            Wechat userInfo = WechatUtils.getUserInfo(openid, accessToken);
+            String unionId = userInfo.getUnionId();
+            accountId = unionId;
+            SocialAccounts socialAccount = selectByAccountId(unionId);
+            example.createCriteria().andAccountIdEqualTo(unionId);
+            socialAccountsMapper.deleteByExample(example);
+        }
+        return accountId;
+    }
 }