Skip to content

Commit 93e333e

Browse files
committed
Handling Email Change
1 parent 57162b3 commit 93e333e

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

src/common/errors.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ function createError (name, statusCode) {
3131
}
3232

3333
module.exports = {
34+
EmailRegisteredError: createError('EmailRegisteredError', 409),
3435
BadRequestError: createError('BadRequestError', 400),
3536
UnauthorizedError: createError('UnauthorizedError', 401),
3637
ForbiddenError: createError('ForbiddenError', 403),

src/services/MemberService.js

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,31 @@ async function updateMember (currentUser, handle, query, data) {
133133
(!member.email || data.email.trim().toLowerCase() !== member.email.trim().toLowerCase())
134134

135135
if (emailChanged) {
136-
data.newEmail = data.email
137-
delete data.email
138-
data.emailVerifyToken = uuid()
139-
data.emailVerifyTokenDate = new Date(new Date().getTime() + Number(config.VERIFY_TOKEN_EXPIRATION) * 60000).toISOString()
140-
data.newEmailVerifyToken = uuid()
141-
data.newEmailVerifyTokenDate = new Date(new Date().getTime() + Number(config.VERIFY_TOKEN_EXPIRATION) * 60000).toISOString()
136+
// check if the new email exists in elastic
137+
const esCheckEmail = {
138+
index: config.ES.MEMBER_PROFILE_ES_INDEX,
139+
type: config.ES.MEMBER_PROFILE_ES_TYPE,
140+
body: {
141+
query: {
142+
bool: {
143+
filter: [ {
144+
match_phrase: { email : data.email }
145+
} ]
146+
}
147+
}
148+
}
149+
}
150+
let checkEmail = await esClient.count(esCheckEmail)
151+
if (checkEmail.count == 0) {
152+
data.newEmail = data.email
153+
delete data.email
154+
data.emailVerifyToken = uuid()
155+
data.emailVerifyTokenDate = new Date(new Date().getTime() + Number(config.VERIFY_TOKEN_EXPIRATION) * 60000).toISOString()
156+
data.newEmailVerifyToken = uuid()
157+
data.newEmailVerifyTokenDate = new Date(new Date().getTime() + Number(config.VERIFY_TOKEN_EXPIRATION) * 60000).toISOString()
158+
} else {
159+
throw new errors.EmailRegisteredError(`Email "${data.email}" is already registered`)
160+
}
142161
}
143162
// update member in db
144163
member.updatedAt = new Date().getTime()

0 commit comments

Comments
 (0)