@opensaas/keystone-nextjs-auth 20.5.0 → 21.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,6 @@ import { getToken } from 'next-auth/jwt';
10
10
  import * as cookie from 'cookie';
11
11
  import ejs from 'ejs';
12
12
  import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter';
13
- import { assertInputObjectType, GraphQLString, GraphQLID } from 'graphql';
14
13
  import { graphql } from '@keystone-6/core';
15
14
 
16
15
  const template$1 = `
@@ -22,6 +21,9 @@ module.exports = withPreconstruct({
22
21
  typescript: {
23
22
  ignoreBuildErrors: true,
24
23
  },
24
+ env: {
25
+ NEXTAUTH_URL: process.env.NEXTAUTH_URL || 'http://localhost:<%= process.env.PORT || 3000 %><%= keystonePath || '' %>/api/auth',
26
+ },
25
27
  eslint: {
26
28
  ignoreDuringBuilds: true,
27
29
  },
@@ -77,7 +79,6 @@ const nextConfigTemplate = ({
77
79
 
78
80
  function getBaseAuthSchema({
79
81
  listKey,
80
- gqlNames,
81
82
  base
82
83
  }) {
83
84
  const extension = {
@@ -117,22 +118,12 @@ function getBaseAuthSchema({
117
118
  }
118
119
 
119
120
  const getSchemaExtension = ({
120
- identityField,
121
- listKey,
122
- gqlNames
121
+ listKey
123
122
  }) => graphql.extend(base => {
124
123
  var _context;
125
124
 
126
- const uniqueWhereInputType = assertInputObjectType(base.schema.getType(`${listKey}WhereUniqueInput`));
127
- const identityFieldOnUniqueWhere = uniqueWhereInputType.getFields()[identityField];
128
-
129
- if ((identityFieldOnUniqueWhere === null || identityFieldOnUniqueWhere === void 0 ? void 0 : identityFieldOnUniqueWhere.type) !== GraphQLString && (identityFieldOnUniqueWhere === null || identityFieldOnUniqueWhere === void 0 ? void 0 : identityFieldOnUniqueWhere.type) !== GraphQLID) {
130
- throw new Error(`createAuth was called with an identityField of ${identityField} on the list ${listKey} ` + `but that field doesn't allow being searched uniquely with a String or ID. ` + `You should likely add \`isIndexed: 'unique'\` ` + `to the field at ${listKey}.${identityField}`);
131
- }
132
-
133
125
  const baseSchema = getBaseAuthSchema({
134
126
  listKey,
135
- gqlNames,
136
127
  base
137
128
  });
138
129
  return _filterInstanceProperty(_context = [baseSchema.extension]).call(_context, x => x !== undefined);
@@ -144,38 +135,29 @@ import { query } from '.keystone/api';
144
135
  import keystoneConfig from '../../../../../keystone';
145
136
 
146
137
  export default getNextAuthPage({
138
+ autoCreate: <%= autoCreate %>,
147
139
  identityField: '<%= identityField %>',
148
- sessionData: '<%= sessionData %>',
149
140
  listKey: '<%= listKey %>',
150
- userMap: <%- JSON.stringify(userMap) %>,
151
- accountMap: <%- JSON.stringify(accountMap) %>,
152
- profileMap: <%- JSON.stringify(profileMap) %>,
153
- autoCreate: <%= autoCreate %>,
154
- sessionSecret: '<%= sessionSecret %>',
141
+ pages: keystoneConfig.pages,
155
142
  providers: keystoneConfig.providers,
156
143
  query,
144
+ resolver: keystoneConfig.resolver,
145
+ sessionData: '<%= sessionData %>',
146
+ sessionSecret: '<%= sessionSecret %>',
157
147
  });
158
148
  `;
159
149
  const authTemplate = ({
160
- gqlNames,
150
+ autoCreate,
161
151
  identityField,
162
- sessionData,
163
152
  listKey,
164
- autoCreate,
165
- userMap,
166
- accountMap,
167
- profileMap,
153
+ sessionData,
168
154
  sessionSecret
169
155
  }) => {
170
156
  const authOut = ejs.render(template, {
171
- gqlNames,
172
157
  identityField,
173
158
  sessionData,
174
159
  listKey,
175
160
  autoCreate,
176
- userMap,
177
- accountMap,
178
- profileMap,
179
161
  sessionSecret
180
162
  });
181
163
  return authOut;
@@ -189,32 +171,22 @@ const _excluded = ["get", "start"];
189
171
  */
190
172
 
191
173
  function createAuth({
192
- listKey,
193
- identityField,
194
- sessionData,
195
174
  autoCreate,
196
- userMap,
197
- accountMap,
198
- profileMap,
175
+ cookies,
176
+ identityField,
177
+ listKey,
199
178
  keystonePath,
179
+ pages,
180
+ resolver,
200
181
  providers,
182
+ sessionData,
201
183
  sessionSecret
202
184
  }) {
203
185
  // The protectIdentities flag is currently under review to see whether it should be
204
186
  // part of the createAuth API (in which case its use cases need to be documented and tested)
205
187
  // or whether always being true is what we want, in which case we can refactor our code
206
188
  // to match this. -TL
207
- const gqlNames = {
208
- // Core
209
- authenticateItemWithPassword: `authenticate${listKey}WithPassword`,
210
- ItemAuthenticationWithPasswordResult: `${listKey}AuthenticationWithPasswordResult`,
211
- ItemAuthenticationWithPasswordSuccess: `${listKey}AuthenticationWithPasswordSuccess`,
212
- ItemAuthenticationWithPasswordFailure: `${listKey}AuthenticationWithPasswordFailure`,
213
- // Initial data
214
- CreateInitialInput: `CreateInitial${listKey}Input`,
215
- createInitialItem: `createInitial${listKey}`
216
- };
217
- const customPath = !keystonePath || keystonePath === '/' ? '' : keystonePath;
189
+ const customPath = !keystonePath || keystonePath === "/" ? "" : keystonePath;
218
190
  /**
219
191
  * pageMiddleware
220
192
  *
@@ -236,21 +208,17 @@ function createAuth({
236
208
  } = context;
237
209
  const pathname = url.parse(req === null || req === void 0 ? void 0 : req.url).pathname;
238
210
 
239
- if (pathname === `${customPath}/api/__keystone_api_build`) {
240
- return;
241
- }
242
-
243
211
  if (isValidSession) {
244
212
  if (pathname === `${customPath}/api/auth/signin`) {
245
213
  return {
246
- kind: 'redirect',
214
+ kind: "redirect",
247
215
  to: `${customPath}`
248
216
  };
249
217
  }
250
218
 
251
- if (customPath !== '' && pathname === '/') {
219
+ if (customPath !== "" && pathname === "/") {
252
220
  return {
253
- kind: 'redirect',
221
+ kind: "redirect",
254
222
  to: `${customPath}`
255
223
  };
256
224
  }
@@ -258,10 +226,14 @@ function createAuth({
258
226
  return;
259
227
  }
260
228
 
229
+ if (_includesInstanceProperty(pathname).call(pathname, "/_next/") || _includesInstanceProperty(pathname).call(pathname, "/api/auth/") || _includesInstanceProperty(pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signIn) || _includesInstanceProperty(pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.error) || _includesInstanceProperty(pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signOut)) {
230
+ return;
231
+ }
232
+
261
233
  if (!session && !_includesInstanceProperty(pathname).call(pathname, `${customPath}/api/auth/`)) {
262
234
  return {
263
- kind: 'redirect',
264
- to: `${customPath}/api/auth/signin`
235
+ kind: "redirect",
236
+ to: (pages === null || pages === void 0 ? void 0 : pages.signIn) || `${customPath}/api/auth/signin`
265
237
  };
266
238
  }
267
239
  };
@@ -277,22 +249,18 @@ function createAuth({
277
249
 
278
250
  const getAdditionalFiles = () => {
279
251
  const filesToWrite = [{
280
- mode: 'write',
281
- outputPath: 'pages/api/auth/[...nextauth].js',
252
+ mode: "write",
253
+ outputPath: "pages/api/auth/[...nextauth].js",
282
254
  src: authTemplate({
283
- gqlNames,
255
+ autoCreate,
284
256
  identityField,
285
- sessionData,
286
257
  listKey,
287
- autoCreate,
288
- userMap,
289
- accountMap,
290
- profileMap,
258
+ sessionData,
291
259
  sessionSecret
292
260
  })
293
261
  }, {
294
- mode: 'write',
295
- outputPath: 'next.config.js',
262
+ mode: "write",
263
+ outputPath: "next.config.js",
296
264
  src: nextConfigTemplate({
297
265
  keystonePath: customPath
298
266
  })
@@ -306,7 +274,8 @@ function createAuth({
306
274
  */
307
275
 
308
276
 
309
- const publicPages = [`${customPath}/api/auth/csrf`, `${customPath}/api/auth/signin`, `${customPath}/api/auth/callback`, `${customPath}/api/auth/session`, `${customPath}/api/auth/providers`, `${customPath}/api/auth/signout`];
277
+ const publicPages = [`${customPath}/api/__keystone_api_build`, `${customPath}/api/auth/csrf`, `${customPath}/api/auth/signin`, `${customPath}/api/auth/callback`, `${customPath}/api/auth/session`, `${customPath}/api/auth/providers`, `${customPath}/api/auth/signout`, `${customPath}/api/auth/error`]; // TODO: Add Provider Types
278
+ // @ts-ignore
310
279
 
311
280
  function addPages(provider) {
312
281
  const name = provider.id;
@@ -324,8 +293,7 @@ function createAuth({
324
293
 
325
294
  const extendGraphqlSchema = getSchemaExtension({
326
295
  identityField,
327
- listKey,
328
- gqlNames
296
+ listKey
329
297
  });
330
298
  /**
331
299
  * validateConfig
@@ -339,7 +307,9 @@ function createAuth({
339
307
  if (listConfig === undefined) {
340
308
  const msg = `A createAuth() invocation specifies the list "${listKey}" but no list with that key has been defined.`;
341
309
  throw new Error(msg);
342
- } // TODO: Check for String-like typing for identityField? How?
310
+ } // TODO: Check if providers
311
+ // TODO: Check other required commands/data
312
+ // TODO: Check for String-like typing for identityField? How?
343
313
  // TODO: Validate that the identifyField is unique.
344
314
  // TODO: If this field isn't required, what happens if I try to log in as `null`?
345
315
 
@@ -347,9 +317,9 @@ function createAuth({
347
317
  const identityFieldConfig = listConfig.fields[identityField];
348
318
 
349
319
  if (identityFieldConfig === undefined) {
350
- const i = _JSON$stringify(identityField);
320
+ const identityFieldName = _JSON$stringify(identityField);
351
321
 
352
- const msg = `A createAuth() invocation for the "${listKey}" list specifies ${i} as its identityField but no field with that key exists on the list.`;
322
+ const msg = `A createAuth() invocation for the "${listKey}" list specifies ${identityFieldName} as its identityField but no field with that key exists on the list.`;
353
323
  throw new Error(msg);
354
324
  }
355
325
  };
@@ -372,7 +342,15 @@ function createAuth({
372
342
  sessionStrategy = _objectWithoutProperties(_sessionStrategy, _excluded);
373
343
 
374
344
  return _objectSpread(_objectSpread({}, sessionStrategy), {}, {
375
- start,
345
+ start: async ({
346
+ res
347
+ }) => {
348
+ console.log("start");
349
+ const session = await start({
350
+ res
351
+ });
352
+ return session;
353
+ },
376
354
  get: async ({
377
355
  req
378
356
  }) => {
@@ -380,16 +358,15 @@ function createAuth({
380
358
 
381
359
  const pathname = url.parse(req === null || req === void 0 ? void 0 : req.url).pathname;
382
360
 
383
- if (_includesInstanceProperty(pathname).call(pathname, '/api/auth')) {
361
+ if (_includesInstanceProperty(pathname).call(pathname, "/api/auth")) {
384
362
  return;
385
363
  }
386
364
 
387
- if (((_req$headers$authoriz = req.headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(' ')[0]) === 'Bearer') {
365
+ if (((_req$headers$authoriz = req.headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(" ")[0]) === "Bearer") {
388
366
  var _token$data;
389
367
 
390
- const request = req;
391
368
  const token = await getToken({
392
- req: request,
369
+ req,
393
370
  secret: sessionSecret
394
371
  });
395
372
 
@@ -410,14 +387,15 @@ function createAuth({
410
387
  res,
411
388
  req
412
389
  }) => {
413
- const TOKEN_NAME = process.env.NODE_ENV === 'production' ? '__Secure-next-auth.session-token' : 'next-auth.session-token';
414
- res.setHeader('Set-Cookie', cookie.serialize(TOKEN_NAME, '', {
390
+ const TOKEN_NAME = process.env.NODE_ENV === "production" ? "__Secure-next-auth.session-token" : "next-auth.session-token";
391
+ res.setHeader("Set-Cookie", cookie.serialize(TOKEN_NAME, "", {
415
392
  maxAge: 0,
416
393
  expires: new Date(),
417
394
  httpOnly: true,
418
- secure: process.env.NODE_ENV === 'production',
419
- path: '/',
420
- sameSite: 'lax',
395
+ secure: process.env.NODE_ENV === "production",
396
+ path: "/",
397
+ sameSite: "lax",
398
+ // TODO: Update parse to URL
421
399
  domain: url.parse(req.url).hostname
422
400
  }));
423
401
  }
@@ -454,30 +432,37 @@ function createAuth({
454
432
  },
455
433
  enableSessionItem: true,
456
434
  isAccessAllowed: async context => {
457
- var _context$req, _context$req2, _keystoneConfig$ui3;
435
+ var _context$req, _keystoneConfig$ui3;
436
+
437
+ const {
438
+ req
439
+ } = context;
440
+ const pathname = url.parse(req === null || req === void 0 ? void 0 : req.url).pathname; // Allow nextjs scripts and static files to be accessed without auth
458
441
 
459
- if (process.env.NODE_ENV !== 'production' && ((_context$req = context.req) === null || _context$req === void 0 ? void 0 : _context$req.url) !== undefined && new _URL(context.req.url, 'http://example.com').pathname === `${customPath}/api/__keystone_api_build`) {
442
+ if (_includesInstanceProperty(pathname).call(pathname, "/_next/")) {
460
443
  return true;
461
- } // Allow access to the adminMeta data from the /init path to correctly render that page
462
- // even if the user isn't logged in (which should always be the case if they're seeing /init)
444
+ } // Allow keystone to access /api/__keystone_api_build for hot reloading
463
445
 
464
446
 
465
- const headers = (_context$req2 = context.req) === null || _context$req2 === void 0 ? void 0 : _context$req2.headers;
466
- const host = headers ? headers['x-forwarded-host'] || headers.host : null;
467
- const thisUrl = headers !== null && headers !== void 0 && headers.referer ? new _URL(headers.referer) : undefined;
468
- const accessingInitPage = (thisUrl === null || thisUrl === void 0 ? void 0 : thisUrl.pathname) === '/init' && (thisUrl === null || thisUrl === void 0 ? void 0 : thisUrl.host) === host && (await context.sudo().query[listKey].count({})) === 0;
469
- return accessingInitPage || ((_keystoneConfig$ui3 = keystoneConfig.ui) !== null && _keystoneConfig$ui3 !== void 0 && _keystoneConfig$ui3.isAccessAllowed ? keystoneConfig.ui.isAccessAllowed(context) : context.session !== undefined);
447
+ if (process.env.NODE_ENV !== "production" && ((_context$req = context.req) === null || _context$req === void 0 ? void 0 : _context$req.url) !== undefined && new _URL(context.req.url, "http://example.com").pathname === `${customPath}/api/__keystone_api_build`) {
448
+ return true;
449
+ }
450
+
451
+ return (_keystoneConfig$ui3 = keystoneConfig.ui) !== null && _keystoneConfig$ui3 !== void 0 && _keystoneConfig$ui3.isAccessAllowed ? keystoneConfig.ui.isAccessAllowed(context) : context.session !== undefined;
470
452
  }
471
453
  });
472
454
  }
473
455
 
474
- if (!keystoneConfig.session) throw new TypeError('Missing .session configuration');
456
+ if (!keystoneConfig.session) throw new TypeError("Missing .session configuration");
475
457
  const session = withItemData(keystoneConfig.session);
476
458
  const existingExtendGraphQLSchema = keystoneConfig.extendGraphqlSchema;
477
459
  return _objectSpread(_objectSpread({}, keystoneConfig), {}, {
478
460
  ui,
479
- session,
461
+ cookies,
480
462
  providers,
463
+ pages,
464
+ resolver,
465
+ session,
481
466
  lists: _objectSpread({}, keystoneConfig.lists),
482
467
  experimental: _objectSpread(_objectSpread({}, keystoneConfig.experimental), {}, {
483
468
  generateNodeAPI: true
package/package.json CHANGED
@@ -1,27 +1,28 @@
1
1
  {
2
2
  "name": "@opensaas/keystone-nextjs-auth",
3
- "version": "20.5.0",
3
+ "version": "21.1.1",
4
4
  "repository": "https://github.com/opensaasau/keystone-nextjs-auth",
5
5
  "license": "MIT",
6
6
  "main": "dist/opensaas-keystone-nextjs-auth.cjs.js",
7
7
  "module": "dist/opensaas-keystone-nextjs-auth.esm.js",
8
8
  "dependencies": {
9
- "@babel/runtime": "^7.17.8",
10
- "@babel/runtime-corejs3": "^7.17.8",
9
+ "@babel/runtime": "^7.17.9",
10
+ "@babel/runtime-corejs3": "^7.17.9",
11
11
  "@types/ejs": "^3.1.0",
12
- "cookie": "^0.4.2",
12
+ "cookie": "^0.5.0",
13
13
  "cross-fetch": "^3.1.5",
14
- "ejs": "^3.1.6",
14
+ "ejs": "^3.1.7",
15
15
  "fast-deep-equal": "^3.1.3",
16
- "graphql": "^15.8.0",
17
- "next-auth": "^4.3.1"
16
+ "next-auth": "^4.3.4"
18
17
  },
19
18
  "devDependencies": {
20
19
  "@keystone-6/core": "^1.1.0",
20
+ "next": "12.1.0",
21
21
  "react": "^17.0.2"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "@keystone-6/core": "^1.1.0",
25
+ "next": "12.1.0",
25
26
  "react": "^17.0.2"
26
27
  },
27
28
  "engines": {
@@ -58,23 +58,42 @@ async function validateNextAuth(identityField, identity, protectIdentities, item
58
58
 
59
59
  function NextAuthPage(props) {
60
60
  const {
61
+ autoCreate,
62
+ cookies,
63
+ events,
64
+ identityField,
65
+ jwt,
66
+ listKey,
67
+ pages,
61
68
  providers,
62
69
  query,
63
- identityField,
70
+ resolver,
64
71
  sessionData,
65
- listKey,
66
- autoCreate,
67
- userMap,
68
- accountMap,
69
- profileMap,
70
72
  sessionSecret
71
- } = props;
73
+ } = props; // TODO: (v1.1). https://github.com/ijsto/keystone-6-oauth/projects/1#card-78602004
74
+
75
+ console.log('NextAuthPages... ', pages);
76
+
77
+ if (!query) {
78
+ console.error('NextAuthPage got no query.');
79
+ return null;
80
+ }
81
+
82
+ if (!providers || !providers.length) {
83
+ console.error('You need to provide at least one provider.');
84
+ return null;
85
+ }
86
+
72
87
  const list = query[listKey];
73
88
  const queryAPI = query[listKey];
74
89
  const protectIdentities = true;
75
90
  return NextAuth__default["default"]({
76
- secret: sessionSecret,
91
+ cookies,
77
92
  providers,
93
+ pages: pages || {},
94
+ events: events || {},
95
+ jwt: jwt || {},
96
+ secret: sessionSecret,
78
97
  callbacks: {
79
98
  async signIn({
80
99
  user,
@@ -91,28 +110,16 @@ function NextAuthPage(props) {
91
110
  identity = 0;
92
111
  }
93
112
 
94
- const result = await validateNextAuth(identityField, identity, protectIdentities, queryAPI);
95
- const data = {}; // eslint-disable-next-line no-restricted-syntax
96
-
97
- for (const key in userMap) {
98
- if (Object.prototype.hasOwnProperty.call(userMap, key)) {
99
- data[key] = user[userMap[key]];
100
- }
101
- } // eslint-disable-next-line no-restricted-syntax
102
-
113
+ const userInput = resolver ? await resolver({
114
+ user,
115
+ account,
116
+ profile
117
+ }) : {};
118
+ const result = await validateNextAuth(identityField, identity, protectIdentities, queryAPI); // ID
103
119
 
104
- for (const key in accountMap) {
105
- if (Object.prototype.hasOwnProperty.call(accountMap, key)) {
106
- data[key] = account[accountMap[key]];
107
- }
108
- } // eslint-disable-next-line no-restricted-syntax
109
-
110
-
111
- for (const key in profileMap) {
112
- if (Object.prototype.hasOwnProperty.call(profileMap, key)) {
113
- data[key] = profile[profileMap[key]];
114
- }
115
- }
120
+ const data = _objectSpread({
121
+ [identityField]: identity
122
+ }, userInput);
116
123
 
117
124
  if (!result.success) {
118
125
  if (!autoCreate) {
@@ -167,9 +174,7 @@ function NextAuthPage(props) {
167
174
  const result = await validateNextAuth(identityField, identity, protectIdentities, queryAPI);
168
175
 
169
176
  if (!result.success) {
170
- return {
171
- result: false
172
- };
177
+ return token;
173
178
  }
174
179
 
175
180
  token.itemId = result.item.id;
@@ -58,23 +58,42 @@ async function validateNextAuth(identityField, identity, protectIdentities, item
58
58
 
59
59
  function NextAuthPage(props) {
60
60
  const {
61
+ autoCreate,
62
+ cookies,
63
+ events,
64
+ identityField,
65
+ jwt,
66
+ listKey,
67
+ pages,
61
68
  providers,
62
69
  query,
63
- identityField,
70
+ resolver,
64
71
  sessionData,
65
- listKey,
66
- autoCreate,
67
- userMap,
68
- accountMap,
69
- profileMap,
70
72
  sessionSecret
71
- } = props;
73
+ } = props; // TODO: (v1.1). https://github.com/ijsto/keystone-6-oauth/projects/1#card-78602004
74
+
75
+ console.log('NextAuthPages... ', pages);
76
+
77
+ if (!query) {
78
+ console.error('NextAuthPage got no query.');
79
+ return null;
80
+ }
81
+
82
+ if (!providers || !providers.length) {
83
+ console.error('You need to provide at least one provider.');
84
+ return null;
85
+ }
86
+
72
87
  const list = query[listKey];
73
88
  const queryAPI = query[listKey];
74
89
  const protectIdentities = true;
75
90
  return NextAuth__default["default"]({
76
- secret: sessionSecret,
91
+ cookies,
77
92
  providers,
93
+ pages: pages || {},
94
+ events: events || {},
95
+ jwt: jwt || {},
96
+ secret: sessionSecret,
78
97
  callbacks: {
79
98
  async signIn({
80
99
  user,
@@ -91,28 +110,16 @@ function NextAuthPage(props) {
91
110
  identity = 0;
92
111
  }
93
112
 
94
- const result = await validateNextAuth(identityField, identity, protectIdentities, queryAPI);
95
- const data = {}; // eslint-disable-next-line no-restricted-syntax
96
-
97
- for (const key in userMap) {
98
- if (Object.prototype.hasOwnProperty.call(userMap, key)) {
99
- data[key] = user[userMap[key]];
100
- }
101
- } // eslint-disable-next-line no-restricted-syntax
102
-
113
+ const userInput = resolver ? await resolver({
114
+ user,
115
+ account,
116
+ profile
117
+ }) : {};
118
+ const result = await validateNextAuth(identityField, identity, protectIdentities, queryAPI); // ID
103
119
 
104
- for (const key in accountMap) {
105
- if (Object.prototype.hasOwnProperty.call(accountMap, key)) {
106
- data[key] = account[accountMap[key]];
107
- }
108
- } // eslint-disable-next-line no-restricted-syntax
109
-
110
-
111
- for (const key in profileMap) {
112
- if (Object.prototype.hasOwnProperty.call(profileMap, key)) {
113
- data[key] = profile[profileMap[key]];
114
- }
115
- }
120
+ const data = _objectSpread({
121
+ [identityField]: identity
122
+ }, userInput);
116
123
 
117
124
  if (!result.success) {
118
125
  if (!autoCreate) {
@@ -167,9 +174,7 @@ function NextAuthPage(props) {
167
174
  const result = await validateNextAuth(identityField, identity, protectIdentities, queryAPI);
168
175
 
169
176
  if (!result.success) {
170
- return {
171
- result: false
172
- };
177
+ return token;
173
178
  }
174
179
 
175
180
  token.itemId = result.item.id;