@opensaas/keystone-nextjs-auth 21.1.1 → 22.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,4 @@
1
1
  import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';
2
- import _JSON$stringify from '@babel/runtime-corejs3/core-js-stable/json/stringify';
3
2
  import NextAuth from 'next-auth';
4
3
 
5
4
  async function findMatchingIdentity(identityField, identity, queryAPI) {
@@ -61,9 +60,7 @@ function NextAuthPage(props) {
61
60
  resolver,
62
61
  sessionData,
63
62
  sessionSecret
64
- } = props; // TODO: (v1.1). https://github.com/ijsto/keystone-6-oauth/projects/1#card-78602004
65
-
66
- console.log('NextAuthPages... ', pages);
63
+ } = props;
67
64
 
68
65
  if (!query) {
69
66
  console.error('NextAuthPage got no query.');
@@ -76,7 +73,6 @@ function NextAuthPage(props) {
76
73
  }
77
74
 
78
75
  const list = query[listKey];
79
- const queryAPI = query[listKey];
80
76
  const protectIdentities = true;
81
77
  return NextAuth({
82
78
  cookies,
@@ -106,7 +102,7 @@ function NextAuthPage(props) {
106
102
  account,
107
103
  profile
108
104
  }) : {};
109
- const result = await validateNextAuth(identityField, identity, protectIdentities, queryAPI); // ID
105
+ const result = await validateNextAuth(identityField, identity, protectIdentities, list); // ID
110
106
 
111
107
  const data = _objectSpread({
112
108
  [identityField]: identity
@@ -114,26 +110,38 @@ function NextAuthPage(props) {
114
110
 
115
111
  if (!result.success) {
116
112
  if (!autoCreate) {
117
- console.log('`autoCreate` if set to `false`, skipping user auto-creation');
118
113
  return false;
119
114
  }
120
115
 
121
- console.log('`autoCreate` if set to `true`, auto-creating a new user');
122
116
  const createUser = await list.createOne({
123
117
  data
124
118
  }).then(returned => {
125
- console.log('User Created', _JSON$stringify(returned));
126
- return true;
119
+ return {
120
+ success: true,
121
+ user: returned
122
+ };
127
123
  }).catch(error => {
128
- console.log(error);
124
+ console.error(error);
129
125
  throw new Error(error);
130
126
  });
131
- console.log('Created User', createUser);
132
- return createUser;
133
- } // await list.updateOne({where: {id: result.item.id}, data});
134
-
127
+ return createUser.success;
128
+ }
135
129
 
136
- return result.success;
130
+ const updateUser = await list.updateOne({
131
+ where: {
132
+ id: result.item.id
133
+ },
134
+ data
135
+ }).then(returned => {
136
+ return {
137
+ success: true,
138
+ user: returned
139
+ };
140
+ }).catch(error => {
141
+ console.error(error);
142
+ throw new Error(error);
143
+ });
144
+ return updateUser.success;
137
145
  },
138
146
 
139
147
  async redirect({
@@ -146,12 +154,20 @@ function NextAuthPage(props) {
146
154
  session,
147
155
  token
148
156
  }) {
149
- const returnSession = _objectSpread(_objectSpread({}, session), {}, {
150
- data: token.data,
151
- subject: token.sub,
152
- listKey: token.listKey,
153
- itemId: token.itemId
154
- });
157
+ let returnSession = session;
158
+
159
+ if (!token.itemId) {
160
+ return {
161
+ expires: '0'
162
+ };
163
+ } else {
164
+ returnSession = _objectSpread(_objectSpread({}, session), {}, {
165
+ data: token.data,
166
+ subject: token.sub,
167
+ listKey: token.listKey,
168
+ itemId: token.itemId
169
+ });
170
+ }
155
171
 
156
172
  return returnSession;
157
173
  },
@@ -160,26 +176,22 @@ function NextAuthPage(props) {
160
176
  token
161
177
  }) {
162
178
  const identity = token.sub;
179
+ const result = await validateNextAuth(identityField, identity, protectIdentities, list);
163
180
 
164
- if (!token.itemId) {
165
- const result = await validateNextAuth(identityField, identity, protectIdentities, queryAPI);
166
-
167
- if (!result.success) {
168
- return token;
169
- }
170
-
181
+ if (!result.success) {
182
+ token.itemId = null;
183
+ } else {
171
184
  token.itemId = result.item.id;
185
+ const data = await query[listKey].findOne({
186
+ where: {
187
+ id: token.itemId
188
+ },
189
+ query: sessionData || 'id'
190
+ });
191
+ token.data = data;
172
192
  }
173
193
 
174
- const data = await query[listKey].findOne({
175
- where: {
176
- id: token.itemId
177
- },
178
- query: sessionData || 'id'
179
- });
180
-
181
194
  const returnToken = _objectSpread(_objectSpread({}, token), {}, {
182
- data,
183
195
  subject: token.sub,
184
196
  listKey
185
197
  });
@@ -17,10 +17,7 @@ export function getBaseAuthSchema({
17
17
  resolveType: (root, context) => context.session?.listKey,
18
18
  }),
19
19
  resolve(root, args, { session, db }) {
20
- if (
21
- typeof session?.itemId === 'string' &&
22
- typeof session.listKey === 'string'
23
- ) {
20
+ if (typeof session?.itemId === 'string' && typeof session.listKey === 'string') {
24
21
  return db[session.listKey].findOne({
25
22
  where: { id: session.itemId },
26
23
  });
package/src/index.ts CHANGED
@@ -1,25 +1,26 @@
1
- import url from "url";
1
+ import url from 'url';
2
2
  import {
3
3
  AdminFileToWrite,
4
4
  BaseListTypeInfo,
5
5
  KeystoneConfig,
6
6
  KeystoneContext,
7
7
  AdminUIConfig,
8
- SessionStrategy,
9
8
  BaseKeystoneTypeInfo,
10
- } from "@keystone-6/core/types";
11
- import { getSession } from "next-auth/react";
12
- import { getToken } from "next-auth/jwt";
13
- import { Provider } from "next-auth/providers";
9
+ SessionStrategy,
10
+ } from '@keystone-6/core/types';
11
+ import { getSession } from 'next-auth/react';
12
+ import { getToken } from 'next-auth/jwt';
13
+ import { Provider } from 'next-auth/providers';
14
14
 
15
- import * as cookie from "cookie";
15
+ import * as cookie from 'cookie';
16
16
 
17
- import { nextConfigTemplate } from "./templates/next-config";
17
+ import { Session } from 'next-auth';
18
+ import { nextConfigTemplate } from './templates/next-config';
18
19
  // import * as Path from 'path';
19
20
 
20
- import { AuthConfig, KeystoneOAuthConfig, NextAuthSession } from "./types";
21
- import { getSchemaExtension } from "./schema";
22
- import { authTemplate } from "./templates/auth";
21
+ import { AuthConfig, KeystoneOAuthConfig, AuthSessionStrategy } from './types';
22
+ import { getSchemaExtension } from './schema';
23
+ import { authTemplate } from './templates/auth';
23
24
 
24
25
  /**
25
26
  * createAuth function
@@ -27,7 +28,7 @@ import { authTemplate } from "./templates/auth";
27
28
  * Generates config for Keystone to implement standard auth features.
28
29
  */
29
30
 
30
- export type { NextAuthProviders, KeystoneOAuthConfig } from "./types";
31
+ export type { NextAuthProviders, KeystoneOAuthConfig } from './types';
31
32
  export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
32
33
  autoCreate,
33
34
  cookies,
@@ -45,7 +46,7 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
45
46
  // or whether always being true is what we want, in which case we can refactor our code
46
47
  // to match this. -TL
47
48
 
48
- const customPath = !keystonePath || keystonePath === "/" ? "" : keystonePath;
49
+ const customPath = !keystonePath || keystonePath === '/' ? '' : keystonePath;
49
50
  /**
50
51
  * pageMiddleware
51
52
  *
@@ -56,36 +57,41 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
56
57
  * - to the init page when initFirstItem is configured, and there are no user in the database
57
58
  * - to the signin page when no valid session is present
58
59
  */
59
- const pageMiddleware: AdminUIConfig<BaseKeystoneTypeInfo>["pageMiddleware"] =
60
- async ({ context, isValidSession }) => {
61
- const { req, session } = context;
62
- const pathname = url.parse(req?.url!).pathname!;
60
+ const pageMiddleware: AdminUIConfig<BaseKeystoneTypeInfo>['pageMiddleware'] = async ({
61
+ context,
62
+ isValidSession,
63
+ }) => {
64
+ const { req, session } = context;
65
+ const pathname = url.parse(req?.url!).pathname!;
63
66
 
64
- if (isValidSession) {
65
- if (pathname === `${customPath}/api/auth/signin`) {
66
- return { kind: "redirect", to: `${customPath}` };
67
- }
68
- if (customPath !== "" && pathname === "/") {
69
- return { kind: "redirect", to: `${customPath}` };
70
- }
71
- return;
72
- }
67
+ if (isValidSession) {
73
68
  if (
74
- pathname.includes("/_next/") ||
75
- pathname.includes("/api/auth/") ||
76
- pathname.includes(pages?.signIn) ||
77
- pathname.includes(pages?.error) ||
78
- pathname.includes(pages?.signOut)
69
+ pathname === `${customPath}/api/auth/signin` ||
70
+ (pages?.signIn && pathname.includes(pages?.signIn))
79
71
  ) {
80
- return;
72
+ return { kind: 'redirect', to: `${customPath}` };
81
73
  }
82
- if (!session && !pathname.includes(`${customPath}/api/auth/`)) {
83
- return {
84
- kind: "redirect",
85
- to: pages?.signIn || `${customPath}/api/auth/signin`,
86
- };
74
+ if (customPath !== '' && pathname === '/') {
75
+ return { kind: 'redirect', to: `${customPath}` };
87
76
  }
88
- };
77
+ return;
78
+ }
79
+ if (
80
+ pathname.includes('/_next/') ||
81
+ pathname.includes('/api/auth/') ||
82
+ (pages?.signIn && pathname.includes(pages?.signIn)) ||
83
+ (pages?.error && pathname.includes(pages?.error)) ||
84
+ (pages?.signOut && pathname.includes(pages?.signOut))
85
+ ) {
86
+ return;
87
+ }
88
+ if (!session && !pathname.includes(`${customPath}/api/auth/`)) {
89
+ return {
90
+ kind: 'redirect',
91
+ to: pages?.signIn || `${customPath}/api/auth/signin`,
92
+ };
93
+ }
94
+ };
89
95
 
90
96
  /**
91
97
  * getAdditionalFiles
@@ -98,8 +104,8 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
98
104
  const getAdditionalFiles = () => {
99
105
  const filesToWrite: AdminFileToWrite[] = [
100
106
  {
101
- mode: "write",
102
- outputPath: "pages/api/auth/[...nextauth].js",
107
+ mode: 'write',
108
+ outputPath: 'pages/api/auth/[...nextauth].js',
103
109
  src: authTemplate({
104
110
  autoCreate,
105
111
  identityField,
@@ -109,8 +115,8 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
109
115
  }),
110
116
  },
111
117
  {
112
- mode: "write",
113
- outputPath: "next.config.js",
118
+ mode: 'write',
119
+ outputPath: 'next.config.js',
114
120
  src: nextConfigTemplate({ keystonePath: customPath }),
115
121
  },
116
122
  ];
@@ -186,52 +192,61 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
186
192
  - [ ] We could support additional where input to validate item sessions (e.g an isEnabled boolean)
187
193
  */
188
194
  const withItemData = (
189
- _sessionStrategy: SessionStrategy<Record<string, any>>
190
- ): SessionStrategy<NextAuthSession | undefined> => {
191
- const { get, start, ...sessionStrategy } = _sessionStrategy;
195
+ _sessionStrategy: AuthSessionStrategy<Record<string, any>>
196
+ ): AuthSessionStrategy<{ listKey: string; itemId: string; data: any }> => {
197
+ const { get, end, ...sessionStrategy } = _sessionStrategy;
192
198
  return {
193
199
  ...sessionStrategy,
194
- start: async ({ res }) => {
195
- console.log("start");
196
-
197
- const session = await start({ res });
198
- return session;
199
- },
200
- get: async ({ req }) => {
200
+ get: async ({ req, createContext }) => {
201
+ const session = await get({ req, createContext });
202
+ const sudoContext = createContext({ sudo: true });
201
203
  const pathname = url.parse(req?.url!).pathname!;
202
- if (pathname.includes("/api/auth")) {
204
+ let nextSession: Session;
205
+ if (pathname.includes('/api/auth')) {
203
206
  return;
204
207
  }
205
- if (req.headers.authorization?.split(" ")[0] === "Bearer") {
206
- const token = (await getToken({
208
+ if (req.headers?.authorization?.split(' ')[0] === 'Bearer') {
209
+ nextSession = (await getToken({
207
210
  req,
208
211
  secret: sessionSecret,
209
- })) as NextAuthSession;
210
-
211
- if (token?.data?.id) {
212
- return token;
213
- }
212
+ })) as Session;
213
+ } else {
214
+ nextSession = (await getSession({ req })) as Session;
214
215
  }
215
- const nextSession: unknown = await getSession({ req });
216
216
 
217
- if (nextSession) {
218
- return nextSession as NextAuthSession;
217
+ if (
218
+ !nextSession ||
219
+ !nextSession.listKey ||
220
+ nextSession.listKey !== listKey ||
221
+ !nextSession.itemId ||
222
+ !sudoContext.query[listKey] ||
223
+ !nextSession.itemId
224
+ ) {
225
+ return;
219
226
  }
227
+ return {
228
+ ...nextSession,
229
+ data: nextSession.data,
230
+ listKey: nextSession.listKey,
231
+ itemId: nextSession.itemId,
232
+ ...session,
233
+ };
220
234
  },
221
- end: async ({ res, req }) => {
235
+ end: async ({ res, req, createContext }) => {
236
+ await end({ res, req, createContext });
222
237
  const TOKEN_NAME =
223
- process.env.NODE_ENV === "production"
224
- ? "__Secure-next-auth.session-token"
225
- : "next-auth.session-token";
238
+ process.env.NODE_ENV === 'production'
239
+ ? '__Secure-next-auth.session-token'
240
+ : 'next-auth.session-token';
226
241
  res.setHeader(
227
- "Set-Cookie",
228
- cookie.serialize(TOKEN_NAME, "", {
242
+ 'Set-Cookie',
243
+ cookie.serialize(TOKEN_NAME, '', {
229
244
  maxAge: 0,
230
245
  expires: new Date(),
231
246
  httpOnly: true,
232
- secure: process.env.NODE_ENV === "production",
233
- path: "/",
234
- sameSite: "lax",
247
+ secure: process.env.NODE_ENV === 'production',
248
+ path: '/',
249
+ sameSite: 'lax',
235
250
  // TODO: Update parse to URL
236
251
  domain: url.parse(req.url as string).hostname as string,
237
252
  })
@@ -257,28 +272,24 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
257
272
  ui = {
258
273
  ...keystoneConfig.ui,
259
274
  publicPages: [...(keystoneConfig.ui.publicPages || []), ...publicPages],
260
- getAdditionalFiles: [
261
- ...(keystoneConfig.ui?.getAdditionalFiles || []),
262
- getAdditionalFiles,
263
- ],
264
- pageMiddleware: async (args) =>
265
- (await pageMiddleware(args)) ??
266
- keystoneConfig?.ui?.pageMiddleware?.(args),
275
+ getAdditionalFiles: [...(keystoneConfig.ui?.getAdditionalFiles || []), getAdditionalFiles],
276
+ pageMiddleware: async args =>
277
+ (await pageMiddleware(args)) ?? keystoneConfig?.ui?.pageMiddleware?.(args),
267
278
  enableSessionItem: true,
268
279
  isAccessAllowed: async (context: KeystoneContext) => {
269
280
  const { req } = context;
270
281
  const pathname = url.parse(req?.url!).pathname!;
271
282
 
272
283
  // Allow nextjs scripts and static files to be accessed without auth
273
- if (pathname.includes("/_next/")) {
284
+ if (pathname.includes('/_next/')) {
274
285
  return true;
275
286
  }
276
287
 
277
288
  // Allow keystone to access /api/__keystone_api_build for hot reloading
278
289
  if (
279
- process.env.NODE_ENV !== "production" &&
290
+ process.env.NODE_ENV !== 'production' &&
280
291
  context.req?.url !== undefined &&
281
- new URL(context.req.url, "http://example.com").pathname ===
292
+ new URL(context.req.url, 'http://example.com').pathname ===
282
293
  `${customPath}/api/__keystone_api_build`
283
294
  ) {
284
295
  return true;
@@ -291,9 +302,8 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
291
302
  };
292
303
  }
293
304
 
294
- if (!keystoneConfig.session)
295
- throw new TypeError("Missing .session configuration");
296
- const session = withItemData(keystoneConfig.session);
305
+ if (!keystoneConfig.session) throw new TypeError('Missing .session configuration');
306
+ const session = withItemData(keystoneConfig.session) as SessionStrategy<any>;
297
307
 
298
308
  const existingExtendGraphQLSchema = keystoneConfig.extendGraphqlSchema;
299
309
  return {
@@ -312,7 +322,7 @@ export function createAuth<GeneratedListTypes extends BaseListTypeInfo>({
312
322
  generateNodeAPI: true,
313
323
  },
314
324
  extendGraphqlSchema: existingExtendGraphQLSchema
315
- ? (schema) => existingExtendGraphQLSchema(extendGraphqlSchema(schema))
325
+ ? schema => existingExtendGraphQLSchema(extendGraphqlSchema(schema))
316
326
  : extendGraphqlSchema,
317
327
  };
318
328
  };
@@ -4,10 +4,7 @@ export async function findMatchingIdentity(
4
4
  identityField: string,
5
5
  identity: string | number,
6
6
  queryAPI: any
7
- ): Promise<
8
- | { success: false; code: AuthTokenRequestErrorCode }
9
- | { success: true; item: any }
10
- > {
7
+ ): Promise<{ success: false; code: AuthTokenRequestErrorCode } | { success: true; item: any }> {
11
8
  const item = await queryAPI.findOne({
12
9
  where: { [identityField]: identity },
13
10
  });
@@ -1,34 +1,31 @@
1
- import NextAuth, {
2
- CookiesOptions,
3
- EventCallbacks,
4
- PagesOptions,
5
- } from 'next-auth';
1
+ import NextAuth, { CookiesOptions, EventCallbacks, PagesOptions } from 'next-auth';
6
2
  import type { KeystoneListsAPI } from '@keystone-6/core/types';
7
3
  import { Provider } from 'next-auth/providers';
8
4
  import { JWTOptions } from 'next-auth/jwt';
9
5
  import { validateNextAuth } from '../lib/validateNextAuth';
10
6
 
11
- // TODO: See if possible to merge with `type AuthConfig`
12
- type CoreNextAuthPageProps = {
7
+ export type NextAuthTemplateProps = {
13
8
  autoCreate: boolean;
14
- cookies?: Partial<CookiesOptions>;
15
- events?: Partial<EventCallbacks>;
16
9
  identityField: string;
17
- jwt?: Partial<JWTOptions>;
18
10
  listKey: string;
19
- pages?: Partial<PagesOptions>;
20
- providers?: Provider[];
21
- resolver?: Function | undefined;
22
11
  sessionData: string | undefined;
23
12
  sessionSecret: string;
24
13
  };
25
14
 
26
- type NextAuthGglProps = {
27
- mutationName?: string;
28
- query?: KeystoneListsAPI<any>;
29
- };
15
+ export type CoreNextAuthPageProps = {
16
+ cookies?: Partial<CookiesOptions>;
17
+ events?: Partial<EventCallbacks>;
18
+ jwt?: Partial<JWTOptions>;
19
+ pages?: Partial<PagesOptions>;
20
+ providers: Provider[];
21
+ resolver?: (args: { user: any; profile: any; account: any }) => Promise<{
22
+ [key: string]: boolean | string | number;
23
+ }>;
24
+ } & NextAuthTemplateProps;
30
25
 
31
- export type NextAuthPageProps = CoreNextAuthPageProps & NextAuthGglProps;
26
+ export type NextAuthPageProps = CoreNextAuthPageProps & {
27
+ query: KeystoneListsAPI<any>;
28
+ };
32
29
 
33
30
  export default function NextAuthPage(props: NextAuthPageProps) {
34
31
  const {
@@ -45,8 +42,6 @@ export default function NextAuthPage(props: NextAuthPageProps) {
45
42
  sessionData,
46
43
  sessionSecret,
47
44
  } = props;
48
- // TODO: (v1.1). https://github.com/ijsto/keystone-6-oauth/projects/1#card-78602004
49
- console.log('NextAuthPages... ', pages);
50
45
 
51
46
  if (!query) {
52
47
  console.error('NextAuthPage got no query.');
@@ -59,7 +54,6 @@ export default function NextAuthPage(props: NextAuthPageProps) {
59
54
  }
60
55
 
61
56
  const list = query[listKey];
62
- const queryAPI = query[listKey];
63
57
  const protectIdentities = true;
64
58
 
65
59
  return NextAuth({
@@ -79,16 +73,9 @@ export default function NextAuthPage(props: NextAuthPageProps) {
79
73
  } else {
80
74
  identity = 0;
81
75
  }
82
- const userInput = resolver
83
- ? await resolver({ user, account, profile })
84
- : {};
85
-
86
- const result = await validateNextAuth(
87
- identityField,
88
- identity,
89
- protectIdentities,
90
- queryAPI
91
- );
76
+ const userInput = resolver ? await resolver({ user, account, profile }) : {};
77
+
78
+ const result = await validateNextAuth(identityField, identity, protectIdentities, list);
92
79
  // ID
93
80
  const data: any = {
94
81
  [identityField]: identity,
@@ -97,66 +84,67 @@ export default function NextAuthPage(props: NextAuthPageProps) {
97
84
 
98
85
  if (!result.success) {
99
86
  if (!autoCreate) {
100
- console.log(
101
- '`autoCreate` if set to `false`, skipping user auto-creation'
102
- );
103
87
  return false;
104
88
  }
105
- console.log(
106
- '`autoCreate` if set to `true`, auto-creating a new user'
107
- );
108
89
 
109
90
  const createUser = await list
110
91
  .createOne({ data })
111
- .then((returned) => {
112
- console.log('User Created', JSON.stringify(returned));
113
- return true;
92
+ .then(returned => {
93
+ return { success: true, user: returned };
114
94
  })
115
- .catch((error) => {
116
- console.log(error);
95
+ .catch(error => {
96
+ console.error(error);
117
97
  throw new Error(error);
118
98
  });
119
- console.log('Created User', createUser);
120
- return createUser;
99
+ return createUser.success;
121
100
  }
122
- // await list.updateOne({where: {id: result.item.id}, data});
123
- return result.success;
101
+
102
+ const updateUser = await list
103
+ .updateOne({ where: { id: result.item.id }, data })
104
+ .then(returned => {
105
+ return { success: true, user: returned };
106
+ })
107
+ .catch(error => {
108
+ console.error(error);
109
+ throw new Error(error);
110
+ });
111
+ return updateUser.success;
124
112
  },
125
113
  async redirect({ url }) {
126
114
  return url;
127
115
  },
128
116
  async session({ session, token }) {
129
- const returnSession = {
130
- ...session,
131
- data: token.data,
132
- subject: token.sub,
133
- listKey: token.listKey,
134
- itemId: token.itemId,
135
- };
117
+ let returnSession = session;
118
+ if (!token.itemId) {
119
+ return { expires: '0' };
120
+ } else {
121
+ returnSession = {
122
+ ...session,
123
+ data: token.data,
124
+ subject: token.sub,
125
+ listKey: token.listKey as string,
126
+ itemId: token.itemId as string,
127
+ };
128
+ }
129
+
136
130
  return returnSession;
137
131
  },
138
132
  async jwt({ token }) {
139
133
  const identity = token.sub as number | string;
140
- if (!token.itemId) {
141
- const result = await validateNextAuth(
142
- identityField,
143
- identity,
144
- protectIdentities,
145
- queryAPI
146
- );
147
-
148
- if (!result.success) {
149
- return token;
150
- }
134
+ const result = await validateNextAuth(identityField, identity, protectIdentities, list);
135
+
136
+ if (!result.success) {
137
+ token.itemId = null;
138
+ } else {
151
139
  token.itemId = result.item.id;
140
+ const data = await query[listKey].findOne({
141
+ where: { id: token.itemId },
142
+ query: sessionData || 'id',
143
+ });
144
+ token.data = data;
152
145
  }
153
- const data = await query[listKey].findOne({
154
- where: { id: token.itemId },
155
- query: sessionData || 'id',
156
- });
157
146
  const returnToken = {
158
147
  ...token,
159
- data,
160
148
  subject: token.sub,
161
149
  listKey,
162
150
  };
@@ -167,5 +155,4 @@ export default function NextAuthPage(props: NextAuthPageProps) {
167
155
  });
168
156
  }
169
157
 
170
- export const getNextAuthPage = (props: NextAuthPageProps) => () =>
171
- NextAuthPage({ ...props });
158
+ export const getNextAuthPage = (props: NextAuthPageProps) => () => NextAuthPage({ ...props });
package/src/schema.ts CHANGED
@@ -9,13 +9,11 @@ export const getSchemaExtension = ({
9
9
  identityField: string;
10
10
  listKey: string;
11
11
  }): ExtendGraphqlSchema =>
12
- graphql.extend((base) => {
12
+ graphql.extend(base => {
13
13
  const baseSchema = getBaseAuthSchema({
14
14
  listKey,
15
15
  base,
16
16
  });
17
17
 
18
- return [baseSchema.extension].filter(
19
- (x): x is Exclude<typeof x, undefined> => x !== undefined
20
- );
18
+ return [baseSchema.extension].filter((x): x is Exclude<typeof x, undefined> => x !== undefined);
21
19
  });