Commit 9fb934f0 authored by alex yao's avatar alex yao

fix: 修复登录无法绑定同一账号问题

parent a52d8ff3
...@@ -5,13 +5,17 @@ import cn.com.poc.common.utils.Assert; ...@@ -5,13 +5,17 @@ import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.user.dto.MemberLoginRequestDto; import cn.com.poc.user.dto.MemberLoginRequestDto;
import cn.com.poc.user.entity.MemberInfoEntity; import cn.com.poc.user.entity.MemberInfoEntity;
import cn.com.poc.user.query.CheckMemberInfoQueryCondition;
import cn.com.poc.user.query.CheckMemberInfoQueryItem;
import cn.com.poc.user.service.BizMemberInfoService; import cn.com.poc.user.service.BizMemberInfoService;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.data.model.BaseModel; import cn.com.yict.framemax.data.model.BaseModel;
import cn.com.yict.framemax.frame.service.FmxParamConfigService; import cn.com.yict.framemax.frame.service.FmxParamConfigService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
@Component @Component
public class EmailLoginChannel implements LoginChannelService { public class EmailLoginChannel implements LoginChannelService {
...@@ -30,9 +34,26 @@ public class EmailLoginChannel implements LoginChannelService { ...@@ -30,9 +34,26 @@ public class EmailLoginChannel implements LoginChannelService {
if (!judgeCodeService.judgeCode(memberLoginRequest.getAccount(), memberLoginRequest.getAuthCode())) { if (!judgeCodeService.judgeCode(memberLoginRequest.getAccount(), memberLoginRequest.getAuthCode())) {
throw new I18nMessageException("exception/verification.code.is.incorrect.please.re-enter"); throw new I18nMessageException("exception/verification.code.is.incorrect.please.re-enter");
} }
MemberInfoEntity result = bizMemberInfoService.getMemberEntityByAccount(memberLoginRequest.getAccount());
MemberInfoEntity memberEntityByAccount = bizMemberInfoService.getMemberEntityByAccount(memberLoginRequest.getAccount()); if (result == null) {
if (memberEntityByAccount == null) { //用户没有注册过 需要注册 CheckMemberInfoQueryCondition condition = new CheckMemberInfoQueryCondition();
condition.setEmail(memberLoginRequest.getAccount());
List<CheckMemberInfoQueryItem> checkMemberInfoQueryItems = bizMemberInfoService.checkMemberInfoIsExist(condition);
if (CollectionUtils.isEmpty(checkMemberInfoQueryItems)) {//用户没有注册过 需要注册
result = registerByEmail(memberLoginRequest);
} else { //用户已经注册过 直接登录
CheckMemberInfoQueryItem checkMemberInfoQueryItem = checkMemberInfoQueryItems.get(0);
Integer memberId = checkMemberInfoQueryItem.getMemberId();
result = bizMemberInfoService.getById(memberId);
}
}
return result;
}
private MemberInfoEntity registerByEmail(MemberLoginRequestDto memberLoginRequest) {
MemberInfoEntity result;
MemberInfoEntity memberInfoEntity = new MemberInfoEntity(); MemberInfoEntity memberInfoEntity = new MemberInfoEntity();
memberInfoEntity.setAccount(memberLoginRequest.getAccount()); memberInfoEntity.setAccount(memberLoginRequest.getAccount());
memberInfoEntity.setNickName(memberLoginRequest.getAccount()); memberInfoEntity.setNickName(memberLoginRequest.getAccount());
...@@ -41,9 +62,7 @@ public class EmailLoginChannel implements LoginChannelService { ...@@ -41,9 +62,7 @@ public class EmailLoginChannel implements LoginChannelService {
if (StringUtils.isNoneBlank(param)) { if (StringUtils.isNoneBlank(param)) {
memberInfoEntity.setAvatarUrl(param); memberInfoEntity.setAvatarUrl(param);
} }
return bizMemberInfoService.createMemberInfo(memberInfoEntity); result = bizMemberInfoService.createMemberInfo(memberInfoEntity);
} return result;
return memberEntityByAccount;
} }
} }
...@@ -5,12 +5,16 @@ import cn.com.poc.common.utils.Assert; ...@@ -5,12 +5,16 @@ import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.user.dto.MemberLoginRequestDto; import cn.com.poc.user.dto.MemberLoginRequestDto;
import cn.com.poc.user.entity.MemberInfoEntity; import cn.com.poc.user.entity.MemberInfoEntity;
import cn.com.poc.user.query.CheckMemberInfoQueryCondition;
import cn.com.poc.user.query.CheckMemberInfoQueryItem;
import cn.com.poc.user.service.BizMemberInfoService; import cn.com.poc.user.service.BizMemberInfoService;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.frame.service.FmxParamConfigService; import cn.com.yict.framemax.frame.service.FmxParamConfigService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
/** /**
* @Author:Roger Wu * @Author:Roger Wu
...@@ -39,8 +43,25 @@ public class SmsLoginChannel implements LoginChannelService { ...@@ -39,8 +43,25 @@ public class SmsLoginChannel implements LoginChannelService {
throw new I18nMessageException("exception/verification.code.is.incorrect.please.re-enter"); throw new I18nMessageException("exception/verification.code.is.incorrect.please.re-enter");
} }
MemberInfoEntity memberEntityByAccount = bizMemberInfoService.getMemberEntityByAccount(memberLoginRequest.getAccount()); MemberInfoEntity result = bizMemberInfoService.getMemberEntityByAccount(memberLoginRequest.getAccount());
if (memberEntityByAccount == null) { //用户没有注册过 需要注册 if (result == null) { //用户没有注册过 需要注册
CheckMemberInfoQueryCondition condition = new CheckMemberInfoQueryCondition();
condition.setMobilePhone(memberLoginRequest.getAccount());
List<CheckMemberInfoQueryItem> checkMemberInfoQueryItems = bizMemberInfoService.checkMemberInfoIsExist(condition);
if (CollectionUtils.isEmpty(checkMemberInfoQueryItems)) {
result = registerByMobilePhone(memberLoginRequest);
} else { //用户已经注册过 直接登录
CheckMemberInfoQueryItem checkMemberInfoQueryItem = checkMemberInfoQueryItems.get(0);
Integer memberId = checkMemberInfoQueryItem.getMemberId();
result = bizMemberInfoService.getById(memberId);
}
}
return result;
}
private MemberInfoEntity registerByMobilePhone(MemberLoginRequestDto memberLoginRequest) {
MemberInfoEntity result;
MemberInfoEntity memberInfoEntity = new MemberInfoEntity(); MemberInfoEntity memberInfoEntity = new MemberInfoEntity();
memberInfoEntity.setAccount(memberLoginRequest.getAccount()); memberInfoEntity.setAccount(memberLoginRequest.getAccount());
memberInfoEntity.setNickName(memberLoginRequest.getAccount()); memberInfoEntity.setNickName(memberLoginRequest.getAccount());
...@@ -49,10 +70,8 @@ public class SmsLoginChannel implements LoginChannelService { ...@@ -49,10 +70,8 @@ public class SmsLoginChannel implements LoginChannelService {
memberInfoEntity.setAvatarUrl(param); memberInfoEntity.setAvatarUrl(param);
} }
memberInfoEntity.setMobilePhone(memberLoginRequest.getAccount()); memberInfoEntity.setMobilePhone(memberLoginRequest.getAccount());
return bizMemberInfoService.createMemberInfo(memberInfoEntity); result = bizMemberInfoService.createMemberInfo(memberInfoEntity);
} return result;
return memberEntityByAccount;
} }
......
package cn.com.poc.user.builder;
import cn.com.poc.common.service.JudgeCodeService;
import cn.com.poc.user.dto.MemberLoginRequestDto;
import cn.com.poc.user.entity.MemberInfoEntity;
import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.core.spring.SingleContextInitializer;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = SingleContextInitializer.class)
@WebAppConfiguration
public class LoginChannelTest {
@Autowired
@InjectMocks
EmailLoginChannel emailLoginChannel;
@Autowired
@InjectMocks
SmsLoginChannel smsLoginChannel;
@Mock
JudgeCodeService judgeCodeService;
@Before
public void setup() {
// 启用 Mockito 注解
MockitoAnnotations.initMocks(this);
}
@Test(expected = I18nMessageException.class)
@Transactional
@Rollback
public void testEmailDoLogin_judgeCodeError() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(false);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("alex.yao@superlinksoft.com");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
emailLoginChannel.doLogin(memberLoginRequest);
}
@Test
@Transactional
@Rollback
public void testEmailDoLogin() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(true);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("alex.yao@superlinksoft.com");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
MemberInfoEntity memberInfoEntity = (MemberInfoEntity) emailLoginChannel.doLogin(memberLoginRequest);
assertNotNull(memberInfoEntity);
assertEquals(memberInfoEntity.getMemberId(), Integer.valueOf(197));
}
@Test
@Transactional
@Rollback
public void testEmailDoLogin_registerNewAccount() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(true);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("alex.yao1@superlinksoft.com");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
MemberInfoEntity memberInfoEntity = (MemberInfoEntity) emailLoginChannel.doLogin(memberLoginRequest);
assertNotNull(memberInfoEntity);
}
@Test
@Transactional
@Rollback
public void testSmsDoLogin() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(true);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("13602787613");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
MemberInfoEntity memberInfoEntity = (MemberInfoEntity) smsLoginChannel.doLogin(memberLoginRequest);
assertNotNull(memberInfoEntity);
assertEquals(memberInfoEntity.getMemberId(), Integer.valueOf(197));
}
@Test
@Transactional
@Rollback
public void testSmsDoLogin_registerNewAccount() throws Exception {
when(judgeCodeService.judgeCode(any(), any())).thenReturn(true);
MemberLoginRequestDto memberLoginRequest = Mockito.mock(MemberLoginRequestDto.class);
when(memberLoginRequest.getAccount()).thenReturn("13602787614");
when(memberLoginRequest.getAuthCode()).thenReturn("111");
MemberInfoEntity memberInfoEntity = (MemberInfoEntity) smsLoginChannel.doLogin(memberLoginRequest);
assertNotNull(memberInfoEntity);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment