Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
poc-api
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
poc
poc-api
Commits
9fb934f0
Commit
9fb934f0
authored
Nov 28, 2024
by
alex yao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 修复登录无法绑定同一账号问题
parent
a52d8ff3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
172 additions
and
22 deletions
+172
-22
EmailLoginChannel.java
src/main/java/cn/com/poc/user/builder/EmailLoginChannel.java
+30
-11
SmsLoginChannel.java
src/main/java/cn/com/poc/user/builder/SmsLoginChannel.java
+30
-11
LoginChannelTest.java
src/test/java/cn/com/poc/user/builder/LoginChannelTest.java
+112
-0
No files found.
src/main/java/cn/com/poc/user/builder/EmailLoginChannel.java
View file @
9fb934f0
...
...
@@ -5,13 +5,17 @@ import cn.com.poc.common.utils.Assert;
import
cn.com.poc.common.utils.StringUtils
;
import
cn.com.poc.user.dto.MemberLoginRequestDto
;
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.yict.framemax.core.i18n.I18nMessageException
;
import
cn.com.yict.framemax.data.model.BaseModel
;
import
cn.com.yict.framemax.frame.service.FmxParamConfigService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.util.List
;
@Component
public
class
EmailLoginChannel
implements
LoginChannelService
{
...
...
@@ -30,20 +34,35 @@ public class EmailLoginChannel implements LoginChannelService {
if
(!
judgeCodeService
.
judgeCode
(
memberLoginRequest
.
getAccount
(),
memberLoginRequest
.
getAuthCode
()))
{
throw
new
I18nMessageException
(
"exception/verification.code.is.incorrect.please.re-enter"
);
}
MemberInfoEntity
result
=
bizMemberInfoService
.
getMemberEntityByAccount
(
memberLoginRequest
.
getAccount
());
MemberInfoEntity
memberEntityByAccount
=
bizMemberInfoService
.
getMemberEntityByAccount
(
memberLoginRequest
.
getAccount
());
if
(
memberEntityByAccount
==
null
)
{
//用户没有注册过 需要注册
MemberInfoEntity
memberInfoEntity
=
new
MemberInfoEntity
();
memberInfoEntity
.
setAccount
(
memberLoginRequest
.
getAccount
());
memberInfoEntity
.
setNickName
(
memberLoginRequest
.
getAccount
());
memberInfoEntity
.
setEmail
(
memberLoginRequest
.
getAccount
());
String
param
=
fmxParamConfigService
.
getParam
(
"member.default.avatar"
);
if
(
StringUtils
.
isNoneBlank
(
param
))
{
memberInfoEntity
.
setAvatarUrl
(
param
);
if
(
result
==
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
bizMemberInfoService
.
createMemberInfo
(
memberInfoEntity
);
}
return
memberEntityByAccount
;
return
result
;
}
private
MemberInfoEntity
registerByEmail
(
MemberLoginRequestDto
memberLoginRequest
)
{
MemberInfoEntity
result
;
MemberInfoEntity
memberInfoEntity
=
new
MemberInfoEntity
();
memberInfoEntity
.
setAccount
(
memberLoginRequest
.
getAccount
());
memberInfoEntity
.
setNickName
(
memberLoginRequest
.
getAccount
());
memberInfoEntity
.
setEmail
(
memberLoginRequest
.
getAccount
());
String
param
=
fmxParamConfigService
.
getParam
(
"member.default.avatar"
);
if
(
StringUtils
.
isNoneBlank
(
param
))
{
memberInfoEntity
.
setAvatarUrl
(
param
);
}
result
=
bizMemberInfoService
.
createMemberInfo
(
memberInfoEntity
);
return
result
;
}
}
src/main/java/cn/com/poc/user/builder/SmsLoginChannel.java
View file @
9fb934f0
...
...
@@ -5,12 +5,16 @@ import cn.com.poc.common.utils.Assert;
import
cn.com.poc.common.utils.StringUtils
;
import
cn.com.poc.user.dto.MemberLoginRequestDto
;
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.yict.framemax.core.i18n.I18nMessageException
;
import
cn.com.yict.framemax.frame.service.FmxParamConfigService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.List
;
/**
* @Author:Roger Wu
...
...
@@ -39,20 +43,35 @@ public class SmsLoginChannel implements LoginChannelService {
throw
new
I18nMessageException
(
"exception/verification.code.is.incorrect.please.re-enter"
);
}
MemberInfoEntity
memberEntityByAccount
=
bizMemberInfoService
.
getMemberEntityByAccount
(
memberLoginRequest
.
getAccount
());
if
(
memberEntityByAccount
==
null
)
{
//用户没有注册过 需要注册
MemberInfoEntity
memberInfoEntity
=
new
MemberInfoEntity
();
memberInfoEntity
.
setAccount
(
memberLoginRequest
.
getAccount
());
memberInfoEntity
.
setNickName
(
memberLoginRequest
.
getAccount
());
String
param
=
fmxParamConfigService
.
getParam
(
"member.default.avatar"
);
if
(
StringUtils
.
isNoneBlank
(
param
))
{
memberInfoEntity
.
setAvatarUrl
(
param
);
MemberInfoEntity
result
=
bizMemberInfoService
.
getMemberEntityByAccount
(
memberLoginRequest
.
getAccount
());
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
);
}
memberInfoEntity
.
setMobilePhone
(
memberLoginRequest
.
getAccount
());
return
bizMemberInfoService
.
createMemberInfo
(
memberInfoEntity
);
}
return
memberEntityByAccount
;
return
result
;
}
private
MemberInfoEntity
registerByMobilePhone
(
MemberLoginRequestDto
memberLoginRequest
)
{
MemberInfoEntity
result
;
MemberInfoEntity
memberInfoEntity
=
new
MemberInfoEntity
();
memberInfoEntity
.
setAccount
(
memberLoginRequest
.
getAccount
());
memberInfoEntity
.
setNickName
(
memberLoginRequest
.
getAccount
());
String
param
=
fmxParamConfigService
.
getParam
(
"member.default.avatar"
);
if
(
StringUtils
.
isNoneBlank
(
param
))
{
memberInfoEntity
.
setAvatarUrl
(
param
);
}
memberInfoEntity
.
setMobilePhone
(
memberLoginRequest
.
getAccount
());
result
=
bizMemberInfoService
.
createMemberInfo
(
memberInfoEntity
);
return
result
;
}
...
...
src/test/java/cn/com/poc/user/builder/LoginChannelTest.java
0 → 100644
View file @
9fb934f0
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
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment