@opensaas/keystone-nextjs-auth 26.0.0 → 27.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +10 -0
- package/dist/opensaas-keystone-nextjs-auth.cjs.dev.js +21 -54
- package/dist/opensaas-keystone-nextjs-auth.cjs.prod.js +21 -54
- package/dist/opensaas-keystone-nextjs-auth.esm.js +21 -54
- package/package.json +7 -7
- package/pages/NextAuthPage/dist/opensaas-keystone-nextjs-auth-pages-NextAuthPage.cjs.dev.js +4 -28
- package/pages/NextAuthPage/dist/opensaas-keystone-nextjs-auth-pages-NextAuthPage.cjs.prod.js +4 -28
- package/pages/NextAuthPage/dist/opensaas-keystone-nextjs-auth-pages-NextAuthPage.esm.js +4 -28
- package/src/index.ts +2 -2
@@ -42,17 +42,14 @@ function getBaseAuthSchema(_ref) {
|
|
42
42
|
types: [base.object(listKey)],
|
43
43
|
resolveType: (root, context) => {
|
44
44
|
var _context$session;
|
45
|
-
|
46
45
|
return (_context$session = context.session) === null || _context$session === void 0 ? void 0 : _context$session.listKey;
|
47
46
|
}
|
48
47
|
}),
|
49
|
-
|
50
48
|
resolve(root, args, _ref2) {
|
51
49
|
let {
|
52
50
|
session,
|
53
51
|
db
|
54
52
|
} = _ref2;
|
55
|
-
|
56
53
|
if (typeof (session === null || session === void 0 ? void 0 : session.itemId) === 'string' && typeof session.listKey === 'string') {
|
57
54
|
return db[session.listKey].findOne({
|
58
55
|
where: {
|
@@ -60,10 +57,8 @@ function getBaseAuthSchema(_ref) {
|
|
60
57
|
}
|
61
58
|
});
|
62
59
|
}
|
63
|
-
|
64
60
|
return null;
|
65
61
|
}
|
66
|
-
|
67
62
|
})
|
68
63
|
}
|
69
64
|
};
|
@@ -78,7 +73,6 @@ const getSchemaExtension = _ref => {
|
|
78
73
|
} = _ref;
|
79
74
|
return graphql.extend(base => {
|
80
75
|
var _context;
|
81
|
-
|
82
76
|
const baseSchema = getBaseAuthSchema({
|
83
77
|
listKey,
|
84
78
|
base
|
@@ -128,6 +122,7 @@ const authTemplate = _ref => {
|
|
128
122
|
};
|
129
123
|
|
130
124
|
const _excluded = ["get", "end"];
|
125
|
+
|
131
126
|
/**
|
132
127
|
* createAuth function
|
133
128
|
*
|
@@ -151,6 +146,7 @@ function createAuth(_ref) {
|
|
151
146
|
// part of the createAuth API (in which case its use cases need to be documented and tested)
|
152
147
|
// or whether always being true is what we want, in which case we can refactor our code
|
153
148
|
// to match this. -TL
|
149
|
+
|
154
150
|
const customPath = !keystonePath || keystonePath === '/' ? '' : keystonePath;
|
155
151
|
/**
|
156
152
|
* pageMiddleware
|
@@ -162,29 +158,25 @@ function createAuth(_ref) {
|
|
162
158
|
* - to the init page when initFirstItem is configured, and there are no user in the database
|
163
159
|
* - to the signin page when no valid session is present
|
164
160
|
*/
|
165
|
-
|
166
161
|
const authMiddleware = async _ref2 => {
|
167
162
|
let {
|
168
163
|
context,
|
169
|
-
|
164
|
+
wasAccessAllowed
|
170
165
|
} = _ref2;
|
171
166
|
const {
|
172
167
|
req,
|
173
168
|
session
|
174
169
|
} = context;
|
175
170
|
const pathname = url.parse(req === null || req === void 0 ? void 0 : req.url).pathname;
|
176
|
-
|
177
|
-
if (isValidSession) {
|
171
|
+
if (wasAccessAllowed) {
|
178
172
|
if (customPath !== '' && pathname === '/') {
|
179
173
|
return {
|
180
174
|
kind: 'redirect',
|
181
175
|
to: `${customPath}`
|
182
176
|
};
|
183
177
|
}
|
184
|
-
|
185
178
|
return;
|
186
179
|
}
|
187
|
-
|
188
180
|
if (!session && !_includesInstanceProperty(pathname).call(pathname, `${customPath}/api/auth/`)) {
|
189
181
|
return {
|
190
182
|
kind: 'redirect',
|
@@ -192,6 +184,7 @@ function createAuth(_ref) {
|
|
192
184
|
};
|
193
185
|
}
|
194
186
|
};
|
187
|
+
|
195
188
|
/**
|
196
189
|
* authGetAdditionalFiles
|
197
190
|
*
|
@@ -200,8 +193,6 @@ function createAuth(_ref) {
|
|
200
193
|
*
|
201
194
|
* The signin page is always included, and the init page is included when initFirstItem is set
|
202
195
|
*/
|
203
|
-
|
204
|
-
|
205
196
|
const authGetAdditionalFiles = () => {
|
206
197
|
const filesToWrite = [{
|
207
198
|
mode: 'write',
|
@@ -222,84 +213,75 @@ function createAuth(_ref) {
|
|
222
213
|
}];
|
223
214
|
return filesToWrite;
|
224
215
|
};
|
216
|
+
|
225
217
|
/**
|
226
218
|
* publicAuthPages
|
227
219
|
*
|
228
220
|
* Must be added to the ui.publicPages config
|
229
221
|
*/
|
230
|
-
|
231
|
-
|
232
|
-
const authPublicPages = [`${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
|
222
|
+
const authPublicPages = [`${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`];
|
223
|
+
// TODO: Add Provider Types
|
233
224
|
// @ts-ignore
|
234
|
-
|
235
225
|
function addPages(provider) {
|
236
226
|
const name = provider.id;
|
237
227
|
authPublicPages.push(`${customPath}/api/auth/signin/${name}`);
|
238
228
|
authPublicPages.push(`${customPath}/api/auth/callback/${name}`);
|
239
229
|
}
|
240
|
-
|
241
230
|
_mapInstanceProperty(providers).call(providers, addPages);
|
231
|
+
|
242
232
|
/**
|
243
233
|
* extendGraphqlSchema
|
244
234
|
*
|
245
235
|
* Must be added to the extendGraphqlSchema config. Can be composed.
|
246
236
|
*/
|
247
|
-
|
248
|
-
|
249
237
|
const extendGraphqlSchema = getSchemaExtension({
|
250
238
|
identityField,
|
251
239
|
listKey
|
252
240
|
});
|
241
|
+
|
253
242
|
/**
|
254
243
|
* validateConfig
|
255
244
|
*
|
256
245
|
* Validates the provided auth config; optional step when integrating auth
|
257
246
|
*/
|
258
|
-
|
259
247
|
const validateConfig = keystoneConfig => {
|
260
248
|
const listConfig = keystoneConfig.lists[listKey];
|
261
|
-
|
262
249
|
if (listConfig === undefined) {
|
263
250
|
const msg = `A createAuth() invocation specifies the list "${listKey}" but no list with that key has been defined.`;
|
264
251
|
throw new Error(msg);
|
265
|
-
}
|
252
|
+
}
|
253
|
+
|
254
|
+
// TODO: Check if providers
|
266
255
|
// TODO: Check other required commands/data
|
256
|
+
|
267
257
|
// TODO: Check for String-like typing for identityField? How?
|
268
258
|
// TODO: Validate that the identifyField is unique.
|
269
259
|
// TODO: If this field isn't required, what happens if I try to log in as `null`?
|
270
|
-
|
271
|
-
|
272
260
|
const identityFieldConfig = listConfig.fields[identityField];
|
273
|
-
|
274
261
|
if (identityFieldConfig === undefined) {
|
275
262
|
const identityFieldName = _JSON$stringify(identityField);
|
276
|
-
|
277
263
|
const msg = `A createAuth() invocation for the "${listKey}" list specifies ${identityFieldName} as its identityField but no field with that key exists on the list.`;
|
278
264
|
throw new Error(msg);
|
279
265
|
}
|
280
266
|
};
|
267
|
+
|
281
268
|
/**
|
282
269
|
* withItemData
|
283
270
|
*
|
284
271
|
* Automatically injects a session.data value with the authenticated item
|
285
272
|
*/
|
286
|
-
|
287
273
|
/* TODO:
|
288
274
|
- [ ] We could support additional where input to validate item sessions (e.g an isEnabled boolean)
|
289
275
|
*/
|
290
|
-
|
291
|
-
|
292
276
|
const withItemData = _sessionStrategy => {
|
293
277
|
const {
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
278
|
+
get,
|
279
|
+
end
|
280
|
+
} = _sessionStrategy,
|
281
|
+
sessionStrategy = _objectWithoutProperties(_sessionStrategy, _excluded);
|
299
282
|
return _objectSpread(_objectSpread({}, sessionStrategy), {}, {
|
300
283
|
get: async _ref3 => {
|
301
284
|
var _req$headers, _req$headers$authoriz;
|
302
|
-
|
303
285
|
let {
|
304
286
|
context
|
305
287
|
} = _ref3;
|
@@ -309,13 +291,10 @@ function createAuth(_ref) {
|
|
309
291
|
const pathname = url.parse(req === null || req === void 0 ? void 0 : req.url).pathname;
|
310
292
|
let nextSession;
|
311
293
|
if (!req) return;
|
312
|
-
|
313
294
|
if (_includesInstanceProperty(pathname).call(pathname, '/api/auth')) {
|
314
295
|
return;
|
315
296
|
}
|
316
|
-
|
317
297
|
const sudoContext = context.sudo();
|
318
|
-
|
319
298
|
if (((_req$headers = req.headers) === null || _req$headers === void 0 ? void 0 : (_req$headers$authoriz = _req$headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(' ')[0]) === 'Bearer') {
|
320
299
|
nextSession = await getToken({
|
321
300
|
req: req,
|
@@ -326,11 +305,9 @@ function createAuth(_ref) {
|
|
326
305
|
req
|
327
306
|
});
|
328
307
|
}
|
329
|
-
|
330
308
|
if (!nextSession || !nextSession.listKey || nextSession.listKey !== listKey || !nextSession.itemId || !sudoContext.query[listKey] || !nextSession.itemId) {
|
331
309
|
return;
|
332
310
|
}
|
333
|
-
|
334
311
|
const reqWithUser = req;
|
335
312
|
reqWithUser.user = {
|
336
313
|
istKey: nextSession.listKey,
|
@@ -372,7 +349,6 @@ function createAuth(_ref) {
|
|
372
349
|
}
|
373
350
|
});
|
374
351
|
};
|
375
|
-
|
376
352
|
function defaultIsAccessAllowed(_ref5) {
|
377
353
|
let {
|
378
354
|
session
|
@@ -389,16 +365,12 @@ function createAuth(_ref) {
|
|
389
365
|
* It validates the auth config against the provided keystone config, and preserves existing
|
390
366
|
* config by composing existing extendGraphqlSchema functions and ui config.
|
391
367
|
*/
|
392
|
-
|
393
|
-
|
394
368
|
const withAuth = keystoneConfig => {
|
395
369
|
var _ui;
|
396
|
-
|
397
370
|
validateConfig(keystoneConfig);
|
398
371
|
let {
|
399
372
|
ui
|
400
373
|
} = keystoneConfig;
|
401
|
-
|
402
374
|
if (!((_ui = ui) !== null && _ui !== void 0 && _ui.isDisabled)) {
|
403
375
|
const {
|
404
376
|
getAdditionalFiles = [],
|
@@ -410,13 +382,10 @@ function createAuth(_ref) {
|
|
410
382
|
publicPages: [...publicPages, ...authPublicPages],
|
411
383
|
isAccessAllowed: async context => {
|
412
384
|
var _context$req;
|
413
|
-
|
414
385
|
const pathname = url.parse((_context$req = context.req) === null || _context$req === void 0 ? void 0 : _context$req.url).pathname;
|
415
|
-
|
416
386
|
if (_startsWithInstanceProperty(pathname).call(pathname, `${customPath}/_next`) || _startsWithInstanceProperty(pathname).call(pathname, `${customPath}/__next`) || _startsWithInstanceProperty(pathname).call(pathname, `${customPath}/api/auth/`) || pages !== null && pages !== void 0 && pages.signIn && _includesInstanceProperty(pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signIn) || pages !== null && pages !== void 0 && pages.error && _includesInstanceProperty(pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.error) || pages !== null && pages !== void 0 && pages.signOut && _includesInstanceProperty(pathname).call(pathname, pages === null || pages === void 0 ? void 0 : pages.signOut)) {
|
417
387
|
return true;
|
418
388
|
}
|
419
|
-
|
420
389
|
return await isAccessAllowed(context);
|
421
390
|
},
|
422
391
|
getAdditionalFiles: [...getAdditionalFiles, authGetAdditionalFiles],
|
@@ -427,7 +396,6 @@ function createAuth(_ref) {
|
|
427
396
|
}
|
428
397
|
});
|
429
398
|
}
|
430
|
-
|
431
399
|
if (!keystoneConfig.session) throw new TypeError('Missing .session configuration');
|
432
400
|
const session = withItemData(keystoneConfig.session);
|
433
401
|
const existingExtendGraphQLSchema = keystoneConfig.extendGraphqlSchema;
|
@@ -442,16 +410,15 @@ function createAuth(_ref) {
|
|
442
410
|
extendGraphqlSchema: existingExtendGraphQLSchema ? schema => existingExtendGraphQLSchema(extendGraphqlSchema(schema)) : extendGraphqlSchema
|
443
411
|
});
|
444
412
|
};
|
445
|
-
|
446
413
|
return {
|
447
|
-
withAuth
|
414
|
+
withAuth
|
415
|
+
// In the future we may want to return the following so that developers can
|
448
416
|
// roll their own. This is pending a review of the use cases this might be
|
449
417
|
// appropriate for, along with documentation and testing.
|
450
418
|
// ui: { enableSessionItem: true, pageMiddleware, getAdditionalFiles, publicPages },
|
451
419
|
// fields,
|
452
420
|
// extendGraphqlSchema,
|
453
421
|
// validateConfig,
|
454
|
-
|
455
422
|
};
|
456
423
|
}
|
457
424
|
|
package/package.json
CHANGED
@@ -1,26 +1,26 @@
|
|
1
1
|
{
|
2
2
|
"name": "@opensaas/keystone-nextjs-auth",
|
3
|
-
"version": "
|
3
|
+
"version": "27.0.0",
|
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.
|
10
|
-
"@babel/runtime-corejs3": "^7.
|
11
|
-
"@types/ejs": "^3.1.
|
9
|
+
"@babel/runtime": "^7.21.0",
|
10
|
+
"@babel/runtime-corejs3": "^7.21.0",
|
11
|
+
"@types/ejs": "^3.1.2",
|
12
12
|
"cookie": "^0.5.0",
|
13
13
|
"cross-fetch": "^3.1.5",
|
14
14
|
"ejs": "^3.1.8",
|
15
15
|
"fast-deep-equal": "^3.1.3",
|
16
|
-
"next-auth": "^4.
|
16
|
+
"next-auth": "^4.19.2"
|
17
17
|
},
|
18
18
|
"devDependencies": {
|
19
|
-
"@keystone-6/core": "
|
19
|
+
"@keystone-6/core": "5.0.0",
|
20
20
|
"react": "^18.2.0"
|
21
21
|
},
|
22
22
|
"peerDependencies": {
|
23
|
-
"@keystone-6/core": "
|
23
|
+
"@keystone-6/core": "5.0.0",
|
24
24
|
"react": "^18.2.0"
|
25
25
|
},
|
26
26
|
"publishConfig": {
|
@@ -14,21 +14,18 @@ async function findMatchingIdentity(identityField, identity, queryAPI) {
|
|
14
14
|
where: {
|
15
15
|
[identityField]: identity
|
16
16
|
}
|
17
|
-
});
|
18
|
-
|
17
|
+
});
|
18
|
+
// Identity failures with helpful errors
|
19
19
|
let code;
|
20
|
-
|
21
20
|
if (!item) {
|
22
21
|
code = 'IDENTITY_NOT_FOUND';
|
23
22
|
}
|
24
|
-
|
25
23
|
if (code) {
|
26
24
|
return {
|
27
25
|
success: false,
|
28
26
|
code
|
29
27
|
};
|
30
28
|
}
|
31
|
-
|
32
29
|
return {
|
33
30
|
success: true,
|
34
31
|
item
|
@@ -40,14 +37,12 @@ async function validateNextAuth(identityField, identity, protectIdentities, item
|
|
40
37
|
const {
|
41
38
|
item
|
42
39
|
} = match;
|
43
|
-
|
44
40
|
if (item) {
|
45
41
|
return {
|
46
42
|
success: true,
|
47
43
|
item
|
48
44
|
};
|
49
45
|
}
|
50
|
-
|
51
46
|
return {
|
52
47
|
success: false,
|
53
48
|
code: protectIdentities ? 'FAILURE' : 'SUBJECT_NOT_FOUND'
|
@@ -69,17 +64,14 @@ function NextAuthPage(props) {
|
|
69
64
|
sessionData,
|
70
65
|
sessionSecret
|
71
66
|
} = props;
|
72
|
-
|
73
67
|
if (!query) {
|
74
68
|
console.error('NextAuthPage got no query.');
|
75
69
|
return null;
|
76
70
|
}
|
77
|
-
|
78
71
|
if (!providers || !providers.length) {
|
79
72
|
console.error('You need to provide at least one provider.');
|
80
73
|
return null;
|
81
74
|
}
|
82
|
-
|
83
75
|
const list = query[listKey];
|
84
76
|
const protectIdentities = true;
|
85
77
|
return NextAuth__default["default"]({
|
@@ -97,7 +89,6 @@ function NextAuthPage(props) {
|
|
97
89
|
profile
|
98
90
|
} = _ref;
|
99
91
|
let identity;
|
100
|
-
|
101
92
|
if (typeof user.id === 'string') {
|
102
93
|
identity = user.id;
|
103
94
|
} else if (typeof user.id === 'number') {
|
@@ -105,23 +96,20 @@ function NextAuthPage(props) {
|
|
105
96
|
} else {
|
106
97
|
identity = 0;
|
107
98
|
}
|
108
|
-
|
109
99
|
const userInput = resolver ? await resolver({
|
110
100
|
user,
|
111
101
|
account,
|
112
102
|
profile
|
113
103
|
}) : {};
|
114
|
-
const result = await validateNextAuth(identityField, identity, protectIdentities, list);
|
115
|
-
|
104
|
+
const result = await validateNextAuth(identityField, identity, protectIdentities, list);
|
105
|
+
// ID
|
116
106
|
const data = _objectSpread({
|
117
107
|
[identityField]: identity
|
118
108
|
}, userInput);
|
119
|
-
|
120
109
|
if (!result.success) {
|
121
110
|
if (!autoCreate) {
|
122
111
|
return false;
|
123
112
|
}
|
124
|
-
|
125
113
|
const createUser = await list.createOne({
|
126
114
|
data
|
127
115
|
}).then(returned => {
|
@@ -135,7 +123,6 @@ function NextAuthPage(props) {
|
|
135
123
|
});
|
136
124
|
return createUser.success;
|
137
125
|
}
|
138
|
-
|
139
126
|
const updateUser = await list.updateOne({
|
140
127
|
where: {
|
141
128
|
id: result.item.id
|
@@ -152,21 +139,18 @@ function NextAuthPage(props) {
|
|
152
139
|
});
|
153
140
|
return updateUser.success;
|
154
141
|
},
|
155
|
-
|
156
142
|
async redirect(_ref2) {
|
157
143
|
let {
|
158
144
|
url
|
159
145
|
} = _ref2;
|
160
146
|
return url;
|
161
147
|
},
|
162
|
-
|
163
148
|
async session(_ref3) {
|
164
149
|
let {
|
165
150
|
session,
|
166
151
|
token
|
167
152
|
} = _ref3;
|
168
153
|
let returnSession = session;
|
169
|
-
|
170
154
|
if (!token.itemId) {
|
171
155
|
return session;
|
172
156
|
} else {
|
@@ -177,22 +161,17 @@ function NextAuthPage(props) {
|
|
177
161
|
itemId: token.itemId
|
178
162
|
});
|
179
163
|
}
|
180
|
-
|
181
164
|
return returnSession;
|
182
165
|
},
|
183
|
-
|
184
166
|
async jwt(_ref4) {
|
185
167
|
let {
|
186
168
|
token
|
187
169
|
} = _ref4;
|
188
170
|
const identity = token.sub;
|
189
|
-
|
190
171
|
if (!identity) {
|
191
172
|
return token;
|
192
173
|
}
|
193
|
-
|
194
174
|
const result = await validateNextAuth(identityField, identity, protectIdentities, list);
|
195
|
-
|
196
175
|
if (!result.success) {
|
197
176
|
token.itemId = undefined;
|
198
177
|
} else {
|
@@ -205,15 +184,12 @@ function NextAuthPage(props) {
|
|
205
184
|
});
|
206
185
|
token.data = data;
|
207
186
|
}
|
208
|
-
|
209
187
|
const returnToken = _objectSpread(_objectSpread({}, token), {}, {
|
210
188
|
subject: token.sub,
|
211
189
|
listKey
|
212
190
|
});
|
213
|
-
|
214
191
|
return returnToken;
|
215
192
|
}
|
216
|
-
|
217
193
|
}
|
218
194
|
});
|
219
195
|
}
|
package/pages/NextAuthPage/dist/opensaas-keystone-nextjs-auth-pages-NextAuthPage.cjs.prod.js
CHANGED
@@ -14,21 +14,18 @@ async function findMatchingIdentity(identityField, identity, queryAPI) {
|
|
14
14
|
where: {
|
15
15
|
[identityField]: identity
|
16
16
|
}
|
17
|
-
});
|
18
|
-
|
17
|
+
});
|
18
|
+
// Identity failures with helpful errors
|
19
19
|
let code;
|
20
|
-
|
21
20
|
if (!item) {
|
22
21
|
code = 'IDENTITY_NOT_FOUND';
|
23
22
|
}
|
24
|
-
|
25
23
|
if (code) {
|
26
24
|
return {
|
27
25
|
success: false,
|
28
26
|
code
|
29
27
|
};
|
30
28
|
}
|
31
|
-
|
32
29
|
return {
|
33
30
|
success: true,
|
34
31
|
item
|
@@ -40,14 +37,12 @@ async function validateNextAuth(identityField, identity, protectIdentities, item
|
|
40
37
|
const {
|
41
38
|
item
|
42
39
|
} = match;
|
43
|
-
|
44
40
|
if (item) {
|
45
41
|
return {
|
46
42
|
success: true,
|
47
43
|
item
|
48
44
|
};
|
49
45
|
}
|
50
|
-
|
51
46
|
return {
|
52
47
|
success: false,
|
53
48
|
code: protectIdentities ? 'FAILURE' : 'SUBJECT_NOT_FOUND'
|
@@ -69,17 +64,14 @@ function NextAuthPage(props) {
|
|
69
64
|
sessionData,
|
70
65
|
sessionSecret
|
71
66
|
} = props;
|
72
|
-
|
73
67
|
if (!query) {
|
74
68
|
console.error('NextAuthPage got no query.');
|
75
69
|
return null;
|
76
70
|
}
|
77
|
-
|
78
71
|
if (!providers || !providers.length) {
|
79
72
|
console.error('You need to provide at least one provider.');
|
80
73
|
return null;
|
81
74
|
}
|
82
|
-
|
83
75
|
const list = query[listKey];
|
84
76
|
const protectIdentities = true;
|
85
77
|
return NextAuth__default["default"]({
|
@@ -97,7 +89,6 @@ function NextAuthPage(props) {
|
|
97
89
|
profile
|
98
90
|
} = _ref;
|
99
91
|
let identity;
|
100
|
-
|
101
92
|
if (typeof user.id === 'string') {
|
102
93
|
identity = user.id;
|
103
94
|
} else if (typeof user.id === 'number') {
|
@@ -105,23 +96,20 @@ function NextAuthPage(props) {
|
|
105
96
|
} else {
|
106
97
|
identity = 0;
|
107
98
|
}
|
108
|
-
|
109
99
|
const userInput = resolver ? await resolver({
|
110
100
|
user,
|
111
101
|
account,
|
112
102
|
profile
|
113
103
|
}) : {};
|
114
|
-
const result = await validateNextAuth(identityField, identity, protectIdentities, list);
|
115
|
-
|
104
|
+
const result = await validateNextAuth(identityField, identity, protectIdentities, list);
|
105
|
+
// ID
|
116
106
|
const data = _objectSpread({
|
117
107
|
[identityField]: identity
|
118
108
|
}, userInput);
|
119
|
-
|
120
109
|
if (!result.success) {
|
121
110
|
if (!autoCreate) {
|
122
111
|
return false;
|
123
112
|
}
|
124
|
-
|
125
113
|
const createUser = await list.createOne({
|
126
114
|
data
|
127
115
|
}).then(returned => {
|
@@ -135,7 +123,6 @@ function NextAuthPage(props) {
|
|
135
123
|
});
|
136
124
|
return createUser.success;
|
137
125
|
}
|
138
|
-
|
139
126
|
const updateUser = await list.updateOne({
|
140
127
|
where: {
|
141
128
|
id: result.item.id
|
@@ -152,21 +139,18 @@ function NextAuthPage(props) {
|
|
152
139
|
});
|
153
140
|
return updateUser.success;
|
154
141
|
},
|
155
|
-
|
156
142
|
async redirect(_ref2) {
|
157
143
|
let {
|
158
144
|
url
|
159
145
|
} = _ref2;
|
160
146
|
return url;
|
161
147
|
},
|
162
|
-
|
163
148
|
async session(_ref3) {
|
164
149
|
let {
|
165
150
|
session,
|
166
151
|
token
|
167
152
|
} = _ref3;
|
168
153
|
let returnSession = session;
|
169
|
-
|
170
154
|
if (!token.itemId) {
|
171
155
|
return session;
|
172
156
|
} else {
|
@@ -177,22 +161,17 @@ function NextAuthPage(props) {
|
|
177
161
|
itemId: token.itemId
|
178
162
|
});
|
179
163
|
}
|
180
|
-
|
181
164
|
return returnSession;
|
182
165
|
},
|
183
|
-
|
184
166
|
async jwt(_ref4) {
|
185
167
|
let {
|
186
168
|
token
|
187
169
|
} = _ref4;
|
188
170
|
const identity = token.sub;
|
189
|
-
|
190
171
|
if (!identity) {
|
191
172
|
return token;
|
192
173
|
}
|
193
|
-
|
194
174
|
const result = await validateNextAuth(identityField, identity, protectIdentities, list);
|
195
|
-
|
196
175
|
if (!result.success) {
|
197
176
|
token.itemId = undefined;
|
198
177
|
} else {
|
@@ -205,15 +184,12 @@ function NextAuthPage(props) {
|
|
205
184
|
});
|
206
185
|
token.data = data;
|
207
186
|
}
|
208
|
-
|
209
187
|
const returnToken = _objectSpread(_objectSpread({}, token), {}, {
|
210
188
|
subject: token.sub,
|
211
189
|
listKey
|
212
190
|
});
|
213
|
-
|
214
191
|
return returnToken;
|
215
192
|
}
|
216
|
-
|
217
193
|
}
|
218
194
|
});
|
219
195
|
}
|