Skip to content

Commit a4ffd55

Browse files
authored
fix: form parsing of apple sign-ins in nextjs (#499)
1 parent 82f1630 commit a4ffd55

File tree

9 files changed

+512
-536
lines changed

9 files changed

+512
-536
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [unreleased]
99

10+
## [13.1.2] - 2023-02-27
11+
12+
### Fixes
13+
14+
- Fixed request parsing issue during third-party (Apple) sign in in NextJS
15+
1016
## [13.1.1] - 2023-02-24
1117

1218
- Refactor dashboard recipe to use auth mode instead of manually checking for api key

lib/build/framework/utils.js

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -154,29 +154,16 @@ function assertThatBodyParserHasBeenUsedForExpressLikeRequest(method, request) {
154154
let jsonParser = body_parser_1.json();
155155
let err = yield new Promise((resolve) => {
156156
let resolvedCalled = false;
157-
/**
158-
* Nextjs allow users to disable the default parser.
159-
* To handle that scenario, we are still parsing the request body
160-
*/
161-
if (request.__supertokensFromNextJS === true) {
162-
/**
163-
* the setImmediate here is to counter the next.js issue
164-
* where the json parser would not resolve and thus the request
165-
* just hangs forever. Next.JS does json parsing on its own.
166-
*/
167-
setImmediate(() => {
157+
if (request.readable) {
158+
jsonParser(request, new http_1.ServerResponse(request), (e) => {
168159
if (!resolvedCalled) {
169160
resolvedCalled = true;
170-
resolve(undefined);
161+
resolve(e);
171162
}
172163
});
164+
} else {
165+
resolve(undefined);
173166
}
174-
jsonParser(request, new http_1.ServerResponse(request), (e) => {
175-
if (!resolvedCalled) {
176-
resolvedCalled = true;
177-
resolve(e);
178-
}
179-
});
180167
});
181168
if (err !== undefined) {
182169
throw new error_1.default({
@@ -192,7 +179,7 @@ function assertThatBodyParserHasBeenUsedForExpressLikeRequest(method, request) {
192179
if (err !== undefined) {
193180
throw new error_1.default({
194181
type: error_1.default.BAD_INPUT_ERROR,
195-
message: "API input error: Please make sure to pass valid URL query params",
182+
message: "API input error: Please make sure to pass valid url encoded form in the request body",
196183
});
197184
}
198185
}
@@ -204,35 +191,18 @@ function assertFormDataBodyParserHasBeenUsedForExpressLikeRequest(request) {
204191
return __awaiter(this, void 0, void 0, function* () {
205192
let parser = body_parser_1.urlencoded({ extended: true });
206193
let err = yield new Promise((resolve) => {
207-
let resolvedCalled = false;
208-
/**
209-
* Nextjs allow users to disable the default parser.
210-
* To handle that scenario, we are still parsing the request body
211-
*/
212-
if (request.__supertokensFromNextJS === true) {
213-
/**
214-
* the setImmediate here is to counter the next.js issue
215-
* where the json parser would not resolve and thus the request
216-
* just hangs forever. Next.JS does json parsing on its own.
217-
*/
218-
setImmediate(() => {
219-
if (!resolvedCalled) {
220-
resolvedCalled = true;
221-
resolve(undefined);
222-
}
194+
if (request.readable) {
195+
parser(request, new http_1.ServerResponse(request), (e) => {
196+
resolve(e);
223197
});
198+
} else {
199+
resolve(undefined);
224200
}
225-
parser(request, new http_1.ServerResponse(request), (e) => {
226-
if (!resolvedCalled) {
227-
resolvedCalled = true;
228-
resolve(e);
229-
}
230-
});
231201
});
232202
if (err !== undefined) {
233203
throw new error_1.default({
234204
type: error_1.default.BAD_INPUT_ERROR,
235-
message: "API input error: Please make sure to pass valid URL query params",
205+
message: "API input error: Please make sure to pass valid url encoded form in the request body",
236206
});
237207
}
238208
});

lib/build/version.d.ts

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/build/version.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/ts/framework/utils.ts

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -136,29 +136,16 @@ export async function assertThatBodyParserHasBeenUsedForExpressLikeRequest(
136136
let jsonParser = json();
137137
let err = await new Promise((resolve) => {
138138
let resolvedCalled = false;
139-
/**
140-
* Nextjs allow users to disable the default parser.
141-
* To handle that scenario, we are still parsing the request body
142-
*/
143-
if (request.__supertokensFromNextJS === true) {
144-
/**
145-
* the setImmediate here is to counter the next.js issue
146-
* where the json parser would not resolve and thus the request
147-
* just hangs forever. Next.JS does json parsing on its own.
148-
*/
149-
setImmediate(() => {
139+
if (request.readable) {
140+
jsonParser(request, new ServerResponse(request), (e) => {
150141
if (!resolvedCalled) {
151142
resolvedCalled = true;
152-
resolve(undefined);
143+
resolve(e);
153144
}
154145
});
146+
} else {
147+
resolve(undefined);
155148
}
156-
jsonParser(request, new ServerResponse(request), (e) => {
157-
if (!resolvedCalled) {
158-
resolvedCalled = true;
159-
resolve(e);
160-
}
161-
});
162149
});
163150
if (err !== undefined) {
164151
throw new STError({
@@ -174,7 +161,7 @@ export async function assertThatBodyParserHasBeenUsedForExpressLikeRequest(
174161
if (err !== undefined) {
175162
throw new STError({
176163
type: STError.BAD_INPUT_ERROR,
177-
message: "API input error: Please make sure to pass valid URL query params",
164+
message: "API input error: Please make sure to pass valid url encoded form in the request body",
178165
});
179166
}
180167
}
@@ -186,35 +173,18 @@ export async function assertFormDataBodyParserHasBeenUsedForExpressLikeRequest(
186173
) {
187174
let parser = urlencoded({ extended: true });
188175
let err = await new Promise((resolve) => {
189-
let resolvedCalled = false;
190-
/**
191-
* Nextjs allow users to disable the default parser.
192-
* To handle that scenario, we are still parsing the request body
193-
*/
194-
if (request.__supertokensFromNextJS === true) {
195-
/**
196-
* the setImmediate here is to counter the next.js issue
197-
* where the json parser would not resolve and thus the request
198-
* just hangs forever. Next.JS does json parsing on its own.
199-
*/
200-
setImmediate(() => {
201-
if (!resolvedCalled) {
202-
resolvedCalled = true;
203-
resolve(undefined);
204-
}
176+
if (request.readable) {
177+
parser(request, new ServerResponse(request), (e) => {
178+
resolve(e);
205179
});
180+
} else {
181+
resolve(undefined);
206182
}
207-
parser(request, new ServerResponse(request), (e) => {
208-
if (!resolvedCalled) {
209-
resolvedCalled = true;
210-
resolve(e);
211-
}
212-
});
213183
});
214184
if (err !== undefined) {
215185
throw new STError({
216186
type: STError.BAD_INPUT_ERROR,
217-
message: "API input error: Please make sure to pass valid URL query params",
187+
message: "API input error: Please make sure to pass valid url encoded form in the request body",
218188
});
219189
}
220190
}

lib/ts/version.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* License for the specific language governing permissions and limitations
1313
* under the License.
1414
*/
15-
export const version = "13.1.1";
15+
export const version = "13.1.2";
1616

1717
export const cdiSupported = ["2.8", "2.9", "2.10", "2.11", "2.12", "2.13", "2.14", "2.15", "2.16", "2.17", "2.18"];
1818

0 commit comments

Comments
 (0)