Skip to content

Commit 277cd11

Browse files
authored
feat: adds user fields to login migration flow (#8)
1 parent 0a240e1 commit 277cd11

File tree

3 files changed

+80
-25
lines changed

3 files changed

+80
-25
lines changed

examples/javascript/src/lib/jane-service.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ const verifyCredentials = async (data, token) => {
104104
const result = {
105105
valid: false,
106106
errorMessage: '',
107+
user: response.body?.user
107108
}
108109

109110
switch (response.statusCode) {

examples/javascript/src/lib/jane-service.spec.mjs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,29 +158,48 @@ describe('jane service', () => {
158158
describe('#verifyCredentials', () => {
159159
test('returns valid when the status code is 200', async () => {
160160
jest.spyOn(apiService, 'post').mockImplementationOnce(() => {
161-
return new Promise((resolve) => resolve({ statusCode: 200 }))
161+
return new Promise((resolve) =>
162+
resolve({
163+
statusCode: 200,
164+
body: {
165+
user: {
166+
167+
168+
nickname: "omar816",
169+
phone: "1112224444",
170+
first_name: "Omar",
171+
last_name: "Scher",
172+
name: "Omar Scher",
173+
birth_date: "",
174+
created_at: "2022-06-28T16:28:21.412Z",
175+
},
176+
},
177+
})
178+
);
162179
})
163180

164-
const { valid } = await Jane.verifyCredentials({
181+
const { valid, user } = await Jane.verifyCredentials({
165182
166183
password: 'password',
167184
})
168185

169186
expect(valid).toBe(true)
187+
expect(user).toBeDefined()
170188
})
171189

172190
test('returns invalid with an error message when the status code is 401', async () => {
173191
jest.spyOn(apiService, 'post').mockImplementationOnce(() => {
174192
return new Promise((resolve) => resolve({ statusCode: 401 }))
175193
})
176194

177-
const { valid, errorMessage } = await Jane.verifyCredentials({
195+
const { valid, errorMessage, user } = await Jane.verifyCredentials({
178196
179197
password: 'password',
180198
})
181199

182200
expect(valid).toBe(false)
183201
expect(errorMessage).toBe('Invalid password')
202+
expect(user).not.toBeDefined();
184203
})
185204

186205
test('returns invalid with an error message when the status code not 200, 401 or 404', async () => {
@@ -193,7 +212,7 @@ describe('jane service', () => {
193212
)
194213
})
195214

196-
const { valid, errorMessage } = await Jane.verifyCredentials({
215+
const { valid, errorMessage, user } = await Jane.verifyCredentials({
197216
198217
password: 'password',
199218
})
@@ -202,6 +221,7 @@ describe('jane service', () => {
202221
expect(errorMessage).toBe(
203222
'Error verifying user {"status":500,"message":"Something went wrong"}'
204223
)
224+
expect(user).not.toBeDefined();
205225
})
206226
})
207227

examples/javascript/src/migration-lambda/index.mjs

Lines changed: 55 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,50 @@
1-
import Jane from '../lib/jane-service.mjs';
2-
import apiService from '../lib/api-service.mjs';
1+
import Jane from "../lib/jane-service.mjs";
2+
import apiService from "../lib/api-service.mjs";
33

4-
const AUTH_TRIGGER = 'UserMigration_Authentication';
5-
const FORGOT_PASSWORD_TRIGGER = 'UserMigration_ForgotPassword';
6-
const EMAIL_VERIFIED = 'true';
7-
const CONFIRMED_STATUS = 'CONFIRMED';
8-
const SUPPRESS_ACTION = 'SUPPRESS';
4+
const AUTH_TRIGGER = "UserMigration_Authentication";
5+
const FORGOT_PASSWORD_TRIGGER = "UserMigration_ForgotPassword";
6+
const EMAIL_VERIFIED = "true";
7+
const CONFIRMED_STATUS = "CONFIRMED";
8+
const SUPPRESS_ACTION = "SUPPRESS";
99

1010
const authHandler = async (event, token) => {
11-
const userExists = await Jane.userExists({
12-
email: event.userName,
13-
app_client_id: event.callerContext.clientId,
14-
}, token);
11+
const userExists = await Jane.userExists(
12+
{
13+
email: event.userName,
14+
app_client_id: event.callerContext.clientId,
15+
},
16+
token
17+
);
1518

1619
if (!userExists) {
17-
throw new Error('User not found');
20+
throw new Error("User not found");
1821
}
1922

20-
const { valid, errorMessage } = await Jane.verifyCredentials({
21-
email: event.userName,
22-
password: event.request.password,
23-
}, token);
23+
const { valid, errorMessage, user } = await Jane.verifyCredentials(
24+
{
25+
email: event.userName,
26+
password: event.request.password,
27+
user: response.body?.user,
28+
},
29+
token
30+
);
31+
32+
const attributes = {};
33+
34+
if (user) {
35+
const { first_name, last_name, phone, birth_date } = user;
36+
37+
first_name && (attributes.given_name = first_name);
38+
last_name && (attributes.family_name = last_name);
39+
phone && (attributes.phone_number = addAreaCodeToPhone(phone));
40+
birth_date && (attributes.birthdate = birth_date);
41+
}
2442

2543
if (valid) {
2644
event.response.userAttributes = {
2745
email: event.userName,
2846
email_verified: EMAIL_VERIFIED,
47+
...attributes,
2948
};
3049
event.response.finalUserStatus = CONFIRMED_STATUS;
3150
event.response.messageAction = SUPPRESS_ACTION;
@@ -37,10 +56,13 @@ const authHandler = async (event, token) => {
3756
};
3857

3958
const forgotPasswordHandler = async (event, token) => {
40-
const { valid, errorMessage } = await Jane.userCanResetPassword({
41-
email: event.userName,
42-
app_client_id: event.callerContext.clientId,
43-
}, token);
59+
const { valid, errorMessage } = await Jane.userCanResetPassword(
60+
{
61+
email: event.userName,
62+
app_client_id: event.callerContext.clientId,
63+
},
64+
token
65+
);
4466

4567
if (!valid) {
4668
throw new Error(errorMessage);
@@ -62,7 +84,7 @@ export const handler = async (event) => {
6284
...event,
6385
request: {
6486
...event.request,
65-
password: 'REDACTED',
87+
password: "REDACTED",
6688
},
6789
};
6890
console.log(sanitizedEvent);
@@ -75,3 +97,15 @@ export const handler = async (event) => {
7597

7698
return event;
7799
};
100+
101+
const addAreaCodeToPhone = (phone) => {
102+
let partial = phone.startsWith("+") ? phone.substring(1) : phone;
103+
104+
// Missing + and country code, 2223334444
105+
if (phone.length === 10) {
106+
return `+1${partial}`;
107+
}
108+
109+
// If was already correct, just return the +
110+
return `+${partial}`;
111+
};

0 commit comments

Comments
 (0)