@opensaas/keystone-nextjs-auth 20.3.0 → 21.0.0
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.
- package/CHANGELOG.md +19 -0
- package/README.md +5 -3
- package/dist/declarations/src/gql/getBaseAuthSchema.d.ts +1 -3
- package/dist/declarations/src/index.d.ts +4 -4
- package/dist/declarations/src/pages/NextAuthPage.d.ts +16 -9
- package/dist/declarations/src/schema.d.ts +1 -3
- package/dist/declarations/src/templates/auth.d.ts +4 -12
- package/dist/declarations/src/types.d.ts +17 -20
- package/dist/opensaas-keystone-nextjs-auth.cjs.dev.js +87 -74
- package/dist/opensaas-keystone-nextjs-auth.cjs.prod.js +85 -74
- package/dist/opensaas-keystone-nextjs-auth.esm.js +85 -74
- package/package.json +7 -7
- package/pages/NextAuthPage/dist/opensaas-keystone-nextjs-auth-pages-NextAuthPage.cjs.dev.js +36 -29
- package/pages/NextAuthPage/dist/opensaas-keystone-nextjs-auth-pages-NextAuthPage.cjs.prod.js +36 -29
- package/pages/NextAuthPage/dist/opensaas-keystone-nextjs-auth-pages-NextAuthPage.esm.js +36 -29
- package/src/gql/getBaseAuthSchema.ts +0 -4
- package/src/index.ts +71 -61
- package/src/pages/NextAuthPage.tsx +58 -37
- package/src/schema.ts +0 -22
- package/src/templates/auth.ts +11 -28
- package/src/templates/next-config.ts +3 -0
- package/src/types.ts +20 -21
- package/src/gql/getInitFirstItemSchema.ts +0 -81
@@ -1,15 +1,17 @@
|
|
1
1
|
import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';
|
2
2
|
import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
|
3
3
|
import _includesInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/includes';
|
4
|
+
import _indexOfInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/index-of';
|
5
|
+
import _Object$values from '@babel/runtime-corejs3/core-js-stable/object/values';
|
4
6
|
import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
|
5
7
|
import _JSON$stringify from '@babel/runtime-corejs3/core-js-stable/json/stringify';
|
6
8
|
import _URL from '@babel/runtime-corejs3/core-js-stable/url';
|
7
9
|
import url from 'url';
|
8
10
|
import { getSession } from 'next-auth/react';
|
11
|
+
import { getToken } from 'next-auth/jwt';
|
9
12
|
import * as cookie from 'cookie';
|
10
13
|
import ejs from 'ejs';
|
11
14
|
import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter';
|
12
|
-
import { assertInputObjectType, GraphQLString, GraphQLID } from 'graphql';
|
13
15
|
import { graphql } from '@keystone-6/core';
|
14
16
|
|
15
17
|
const template$1 = `
|
@@ -21,6 +23,9 @@ module.exports = withPreconstruct({
|
|
21
23
|
typescript: {
|
22
24
|
ignoreBuildErrors: true,
|
23
25
|
},
|
26
|
+
env: {
|
27
|
+
NEXTAUTH_URL: process.env.NEXTAUTH_URL || 'http://localhost:<%= process.env.PORT || 3000 %><%= keystonePath || '' %>/api/auth',
|
28
|
+
},
|
24
29
|
eslint: {
|
25
30
|
ignoreDuringBuilds: true,
|
26
31
|
},
|
@@ -76,7 +81,6 @@ const nextConfigTemplate = ({
|
|
76
81
|
|
77
82
|
function getBaseAuthSchema({
|
78
83
|
listKey,
|
79
|
-
gqlNames,
|
80
84
|
base
|
81
85
|
}) {
|
82
86
|
const extension = {
|
@@ -116,22 +120,12 @@ function getBaseAuthSchema({
|
|
116
120
|
}
|
117
121
|
|
118
122
|
const getSchemaExtension = ({
|
119
|
-
|
120
|
-
listKey,
|
121
|
-
gqlNames
|
123
|
+
listKey
|
122
124
|
}) => graphql.extend(base => {
|
123
125
|
var _context;
|
124
126
|
|
125
|
-
const uniqueWhereInputType = assertInputObjectType(base.schema.getType(`${listKey}WhereUniqueInput`));
|
126
|
-
const identityFieldOnUniqueWhere = uniqueWhereInputType.getFields()[identityField];
|
127
|
-
|
128
|
-
if ((identityFieldOnUniqueWhere === null || identityFieldOnUniqueWhere === void 0 ? void 0 : identityFieldOnUniqueWhere.type) !== GraphQLString && (identityFieldOnUniqueWhere === null || identityFieldOnUniqueWhere === void 0 ? void 0 : identityFieldOnUniqueWhere.type) !== GraphQLID) {
|
129
|
-
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}`);
|
130
|
-
}
|
131
|
-
|
132
127
|
const baseSchema = getBaseAuthSchema({
|
133
128
|
listKey,
|
134
|
-
gqlNames,
|
135
129
|
base
|
136
130
|
});
|
137
131
|
return _filterInstanceProperty(_context = [baseSchema.extension]).call(_context, x => x !== undefined);
|
@@ -143,44 +137,35 @@ import { query } from '.keystone/api';
|
|
143
137
|
import keystoneConfig from '../../../../../keystone';
|
144
138
|
|
145
139
|
export default getNextAuthPage({
|
140
|
+
autoCreate: <%= autoCreate %>,
|
146
141
|
identityField: '<%= identityField %>',
|
147
|
-
sessionData: '<%= sessionData %>',
|
148
142
|
listKey: '<%= listKey %>',
|
149
|
-
|
150
|
-
accountMap: <%- JSON.stringify(accountMap) %>,
|
151
|
-
profileMap: <%- JSON.stringify(profileMap) %>,
|
152
|
-
autoCreate: <%= autoCreate %>,
|
153
|
-
sessionSecret: '<%= sessionSecret %>',
|
143
|
+
pages: keystoneConfig.pages,
|
154
144
|
providers: keystoneConfig.providers,
|
155
145
|
query,
|
146
|
+
resolver: keystoneConfig.resolver,
|
147
|
+
sessionData: '<%= sessionData %>',
|
148
|
+
sessionSecret: '<%= sessionSecret %>',
|
156
149
|
});
|
157
150
|
`;
|
158
151
|
const authTemplate = ({
|
159
|
-
|
152
|
+
autoCreate,
|
160
153
|
identityField,
|
161
|
-
sessionData,
|
162
154
|
listKey,
|
163
|
-
|
164
|
-
userMap,
|
165
|
-
accountMap,
|
166
|
-
profileMap,
|
155
|
+
sessionData,
|
167
156
|
sessionSecret
|
168
157
|
}) => {
|
169
158
|
const authOut = ejs.render(template, {
|
170
|
-
gqlNames,
|
171
159
|
identityField,
|
172
160
|
sessionData,
|
173
161
|
listKey,
|
174
162
|
autoCreate,
|
175
|
-
userMap,
|
176
|
-
accountMap,
|
177
|
-
profileMap,
|
178
163
|
sessionSecret
|
179
164
|
});
|
180
165
|
return authOut;
|
181
166
|
};
|
182
167
|
|
183
|
-
const _excluded = ["get"];
|
168
|
+
const _excluded = ["get", "start"];
|
184
169
|
/**
|
185
170
|
* createAuth function
|
186
171
|
*
|
@@ -188,31 +173,21 @@ const _excluded = ["get"];
|
|
188
173
|
*/
|
189
174
|
|
190
175
|
function createAuth({
|
191
|
-
listKey,
|
192
|
-
identityField,
|
193
|
-
sessionData,
|
194
176
|
autoCreate,
|
195
|
-
|
196
|
-
|
197
|
-
|
177
|
+
cookies,
|
178
|
+
identityField,
|
179
|
+
listKey,
|
198
180
|
keystonePath,
|
181
|
+
pages,
|
182
|
+
resolver,
|
199
183
|
providers,
|
184
|
+
sessionData,
|
200
185
|
sessionSecret
|
201
186
|
}) {
|
202
187
|
// The protectIdentities flag is currently under review to see whether it should be
|
203
188
|
// part of the createAuth API (in which case its use cases need to be documented and tested)
|
204
189
|
// or whether always being true is what we want, in which case we can refactor our code
|
205
190
|
// to match this. -TL
|
206
|
-
const gqlNames = {
|
207
|
-
// Core
|
208
|
-
authenticateItemWithPassword: `authenticate${listKey}WithPassword`,
|
209
|
-
ItemAuthenticationWithPasswordResult: `${listKey}AuthenticationWithPasswordResult`,
|
210
|
-
ItemAuthenticationWithPasswordSuccess: `${listKey}AuthenticationWithPasswordSuccess`,
|
211
|
-
ItemAuthenticationWithPasswordFailure: `${listKey}AuthenticationWithPasswordFailure`,
|
212
|
-
// Initial data
|
213
|
-
CreateInitialInput: `CreateInitial${listKey}Input`,
|
214
|
-
createInitialItem: `createInitial${listKey}`
|
215
|
-
};
|
216
191
|
const customPath = !keystonePath || keystonePath === '/' ? '' : keystonePath;
|
217
192
|
/**
|
218
193
|
* pageMiddleware
|
@@ -229,16 +204,14 @@ function createAuth({
|
|
229
204
|
context,
|
230
205
|
isValidSession
|
231
206
|
}) => {
|
207
|
+
var _context;
|
208
|
+
|
232
209
|
const {
|
233
210
|
req,
|
234
211
|
session
|
235
212
|
} = context;
|
236
213
|
const pathname = url.parse(req === null || req === void 0 ? void 0 : req.url).pathname;
|
237
214
|
|
238
|
-
if (pathname === `${customPath}/api/__keystone_api_build`) {
|
239
|
-
return;
|
240
|
-
}
|
241
|
-
|
242
215
|
if (isValidSession) {
|
243
216
|
if (pathname === `${customPath}/api/auth/signin`) {
|
244
217
|
return {
|
@@ -257,7 +230,11 @@ function createAuth({
|
|
257
230
|
return;
|
258
231
|
}
|
259
232
|
|
260
|
-
if (
|
233
|
+
if (_includesInstanceProperty(pathname).call(pathname, '/_next/') || _includesInstanceProperty(pathname).call(pathname, '/api/auth/')) {
|
234
|
+
return;
|
235
|
+
}
|
236
|
+
|
237
|
+
if (!session && !_includesInstanceProperty(pathname).call(pathname, `${customPath}/api/auth/`) && !(_indexOfInstanceProperty(_context = _Object$values(pages)).call(_context, pathname) > -1)) {
|
261
238
|
return {
|
262
239
|
kind: 'redirect',
|
263
240
|
to: `${customPath}/api/auth/signin`
|
@@ -279,14 +256,10 @@ function createAuth({
|
|
279
256
|
mode: 'write',
|
280
257
|
outputPath: 'pages/api/auth/[...nextauth].js',
|
281
258
|
src: authTemplate({
|
282
|
-
|
259
|
+
autoCreate,
|
283
260
|
identityField,
|
284
|
-
sessionData,
|
285
261
|
listKey,
|
286
|
-
|
287
|
-
userMap,
|
288
|
-
accountMap,
|
289
|
-
profileMap,
|
262
|
+
sessionData,
|
290
263
|
sessionSecret
|
291
264
|
})
|
292
265
|
}, {
|
@@ -305,7 +278,8 @@ function createAuth({
|
|
305
278
|
*/
|
306
279
|
|
307
280
|
|
308
|
-
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`];
|
281
|
+
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
|
282
|
+
// @ts-ignore
|
309
283
|
|
310
284
|
function addPages(provider) {
|
311
285
|
const name = provider.id;
|
@@ -323,8 +297,7 @@ function createAuth({
|
|
323
297
|
|
324
298
|
const extendGraphqlSchema = getSchemaExtension({
|
325
299
|
identityField,
|
326
|
-
listKey
|
327
|
-
gqlNames
|
300
|
+
listKey
|
328
301
|
});
|
329
302
|
/**
|
330
303
|
* validateConfig
|
@@ -338,7 +311,9 @@ function createAuth({
|
|
338
311
|
if (listConfig === undefined) {
|
339
312
|
const msg = `A createAuth() invocation specifies the list "${listKey}" but no list with that key has been defined.`;
|
340
313
|
throw new Error(msg);
|
341
|
-
} // TODO: Check
|
314
|
+
} // TODO: Check if providers
|
315
|
+
// TODO: Check other required commands/data
|
316
|
+
// TODO: Check for String-like typing for identityField? How?
|
342
317
|
// TODO: Validate that the identifyField is unique.
|
343
318
|
// TODO: If this field isn't required, what happens if I try to log in as `null`?
|
344
319
|
|
@@ -346,9 +321,9 @@ function createAuth({
|
|
346
321
|
const identityFieldConfig = listConfig.fields[identityField];
|
347
322
|
|
348
323
|
if (identityFieldConfig === undefined) {
|
349
|
-
const
|
324
|
+
const identityFieldName = _JSON$stringify(identityField);
|
350
325
|
|
351
|
-
const msg = `A createAuth() invocation for the "${listKey}" list specifies ${
|
326
|
+
const msg = `A createAuth() invocation for the "${listKey}" list specifies ${identityFieldName} as its identityField but no field with that key exists on the list.`;
|
352
327
|
throw new Error(msg);
|
353
328
|
}
|
354
329
|
};
|
@@ -364,18 +339,46 @@ function createAuth({
|
|
364
339
|
|
365
340
|
|
366
341
|
const withItemData = _sessionStrategy => {
|
367
|
-
const
|
342
|
+
const {
|
343
|
+
get,
|
344
|
+
start
|
345
|
+
} = _sessionStrategy,
|
346
|
+
sessionStrategy = _objectWithoutProperties(_sessionStrategy, _excluded);
|
368
347
|
|
369
348
|
return _objectSpread(_objectSpread({}, sessionStrategy), {}, {
|
349
|
+
start: async ({
|
350
|
+
res
|
351
|
+
}) => {
|
352
|
+
console.log('start');
|
353
|
+
const session = await start({
|
354
|
+
res
|
355
|
+
});
|
356
|
+
return session;
|
357
|
+
},
|
370
358
|
get: async ({
|
371
359
|
req
|
372
360
|
}) => {
|
361
|
+
var _req$headers$authoriz;
|
362
|
+
|
373
363
|
const pathname = url.parse(req === null || req === void 0 ? void 0 : req.url).pathname;
|
374
364
|
|
375
365
|
if (_includesInstanceProperty(pathname).call(pathname, '/api/auth')) {
|
376
366
|
return;
|
377
367
|
}
|
378
368
|
|
369
|
+
if (((_req$headers$authoriz = req.headers.authorization) === null || _req$headers$authoriz === void 0 ? void 0 : _req$headers$authoriz.split(' ')[0]) === 'Bearer') {
|
370
|
+
var _token$data;
|
371
|
+
|
372
|
+
const token = await getToken({
|
373
|
+
req,
|
374
|
+
secret: sessionSecret
|
375
|
+
});
|
376
|
+
|
377
|
+
if (token !== null && token !== void 0 && (_token$data = token.data) !== null && _token$data !== void 0 && _token$data.id) {
|
378
|
+
return token;
|
379
|
+
}
|
380
|
+
}
|
381
|
+
|
379
382
|
const nextSession = await getSession({
|
380
383
|
req
|
381
384
|
});
|
@@ -396,6 +399,7 @@ function createAuth({
|
|
396
399
|
secure: process.env.NODE_ENV === 'production',
|
397
400
|
path: '/',
|
398
401
|
sameSite: 'lax',
|
402
|
+
// TODO: Update parse to URL
|
399
403
|
domain: url.parse(req.url).hostname
|
400
404
|
}));
|
401
405
|
}
|
@@ -432,19 +436,23 @@ function createAuth({
|
|
432
436
|
},
|
433
437
|
enableSessionItem: true,
|
434
438
|
isAccessAllowed: async context => {
|
435
|
-
var _context$req,
|
439
|
+
var _context$req, _keystoneConfig$ui3;
|
436
440
|
|
437
|
-
|
441
|
+
const {
|
442
|
+
req
|
443
|
+
} = context;
|
444
|
+
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
|
445
|
+
|
446
|
+
if (_includesInstanceProperty(pathname).call(pathname, '/_next/')) {
|
438
447
|
return true;
|
439
|
-
} // Allow
|
440
|
-
// even if the user isn't logged in (which should always be the case if they're seeing /init)
|
448
|
+
} // Allow keystone to access /api/__keystone_api_build for hot reloading
|
441
449
|
|
442
450
|
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
return
|
451
|
+
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`) {
|
452
|
+
return true;
|
453
|
+
}
|
454
|
+
|
455
|
+
return (_keystoneConfig$ui3 = keystoneConfig.ui) !== null && _keystoneConfig$ui3 !== void 0 && _keystoneConfig$ui3.isAccessAllowed ? keystoneConfig.ui.isAccessAllowed(context) : context.session !== undefined;
|
448
456
|
}
|
449
457
|
});
|
450
458
|
}
|
@@ -454,8 +462,11 @@ function createAuth({
|
|
454
462
|
const existingExtendGraphQLSchema = keystoneConfig.extendGraphqlSchema;
|
455
463
|
return _objectSpread(_objectSpread({}, keystoneConfig), {}, {
|
456
464
|
ui,
|
457
|
-
|
465
|
+
cookies,
|
458
466
|
providers,
|
467
|
+
pages,
|
468
|
+
resolver,
|
469
|
+
session,
|
459
470
|
lists: _objectSpread({}, keystoneConfig.lists),
|
460
471
|
experimental: _objectSpread(_objectSpread({}, keystoneConfig.experimental), {}, {
|
461
472
|
generateNodeAPI: true
|
package/package.json
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
{
|
2
2
|
"name": "@opensaas/keystone-nextjs-auth",
|
3
|
-
"version": "
|
3
|
+
"version": "21.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.
|
9
|
+
"@babel/runtime": "^7.17.8",
|
10
|
+
"@babel/runtime-corejs3": "^7.17.8",
|
11
11
|
"@types/ejs": "^3.1.0",
|
12
|
-
"cookie": "^0.4.
|
12
|
+
"cookie": "^0.4.2",
|
13
13
|
"cross-fetch": "^3.1.5",
|
14
14
|
"ejs": "^3.1.6",
|
15
15
|
"fast-deep-equal": "^3.1.3",
|
16
16
|
"graphql": "^15.8.0",
|
17
|
-
"next-auth": "^4.1
|
17
|
+
"next-auth": "^4.3.1"
|
18
18
|
},
|
19
19
|
"devDependencies": {
|
20
|
-
"@keystone-6/core": "^1.0
|
20
|
+
"@keystone-6/core": "^1.1.0",
|
21
21
|
"react": "^17.0.2"
|
22
22
|
},
|
23
23
|
"peerDependencies": {
|
24
|
-
"@keystone-6/core": "^1.0
|
24
|
+
"@keystone-6/core": "^1.1.0",
|
25
25
|
"react": "^17.0.2"
|
26
26
|
},
|
27
27
|
"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
|
-
|
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
|
-
|
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
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
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
|
-
|
105
|
-
|
106
|
-
|
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) {
|
package/pages/NextAuthPage/dist/opensaas-keystone-nextjs-auth-pages-NextAuthPage.cjs.prod.js
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
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
|
-
|
105
|
-
|
106
|
-
|
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) {
|
@@ -49,23 +49,42 @@ async function validateNextAuth(identityField, identity, protectIdentities, item
|
|
49
49
|
|
50
50
|
function NextAuthPage(props) {
|
51
51
|
const {
|
52
|
+
autoCreate,
|
53
|
+
cookies,
|
54
|
+
events,
|
55
|
+
identityField,
|
56
|
+
jwt,
|
57
|
+
listKey,
|
58
|
+
pages,
|
52
59
|
providers,
|
53
60
|
query,
|
54
|
-
|
61
|
+
resolver,
|
55
62
|
sessionData,
|
56
|
-
listKey,
|
57
|
-
autoCreate,
|
58
|
-
userMap,
|
59
|
-
accountMap,
|
60
|
-
profileMap,
|
61
63
|
sessionSecret
|
62
|
-
} = props;
|
64
|
+
} = props; // TODO: (v1.1). https://github.com/ijsto/keystone-6-oauth/projects/1#card-78602004
|
65
|
+
|
66
|
+
console.log('NextAuthPages... ', pages);
|
67
|
+
|
68
|
+
if (!query) {
|
69
|
+
console.error('NextAuthPage got no query.');
|
70
|
+
return null;
|
71
|
+
}
|
72
|
+
|
73
|
+
if (!providers || !providers.length) {
|
74
|
+
console.error('You need to provide at least one provider.');
|
75
|
+
return null;
|
76
|
+
}
|
77
|
+
|
63
78
|
const list = query[listKey];
|
64
79
|
const queryAPI = query[listKey];
|
65
80
|
const protectIdentities = true;
|
66
81
|
return NextAuth({
|
67
|
-
|
82
|
+
cookies,
|
68
83
|
providers,
|
84
|
+
pages: pages || {},
|
85
|
+
events: events || {},
|
86
|
+
jwt: jwt || {},
|
87
|
+
secret: sessionSecret,
|
69
88
|
callbacks: {
|
70
89
|
async signIn({
|
71
90
|
user,
|
@@ -82,28 +101,16 @@ function NextAuthPage(props) {
|
|
82
101
|
identity = 0;
|
83
102
|
}
|
84
103
|
|
85
|
-
const
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
}
|
92
|
-
} // eslint-disable-next-line no-restricted-syntax
|
93
|
-
|
104
|
+
const userInput = resolver ? await resolver({
|
105
|
+
user,
|
106
|
+
account,
|
107
|
+
profile
|
108
|
+
}) : {};
|
109
|
+
const result = await validateNextAuth(identityField, identity, protectIdentities, queryAPI); // ID
|
94
110
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
}
|
99
|
-
} // eslint-disable-next-line no-restricted-syntax
|
100
|
-
|
101
|
-
|
102
|
-
for (const key in profileMap) {
|
103
|
-
if (Object.prototype.hasOwnProperty.call(profileMap, key)) {
|
104
|
-
data[key] = profile[profileMap[key]];
|
105
|
-
}
|
106
|
-
}
|
111
|
+
const data = _objectSpread({
|
112
|
+
[identityField]: identity
|
113
|
+
}, userInput);
|
107
114
|
|
108
115
|
if (!result.success) {
|
109
116
|
if (!autoCreate) {
|
@@ -1,15 +1,11 @@
|
|
1
1
|
import type { BaseItem } from '@keystone-6/core/types';
|
2
2
|
import { graphql } from '@keystone-6/core';
|
3
3
|
|
4
|
-
import { AuthGqlNames } from '../types';
|
5
|
-
|
6
4
|
export function getBaseAuthSchema({
|
7
5
|
listKey,
|
8
|
-
gqlNames,
|
9
6
|
base,
|
10
7
|
}: {
|
11
8
|
listKey: string;
|
12
|
-
gqlNames: AuthGqlNames;
|
13
9
|
base: graphql.BaseSchemaMeta;
|
14
10
|
}) {
|
15
11
|
const extension = {
|