Skip to content

Commit

Permalink
fix: form parsing of apple sign-ins in nextjs (#499)
Browse files Browse the repository at this point in the history
  • Loading branch information
porcellus authored Feb 27, 2023
1 parent 82f1630 commit a4ffd55
Show file tree
Hide file tree
Showing 9 changed files with 512 additions and 536 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [unreleased]

## [13.1.2] - 2023-02-27

### Fixes

- Fixed request parsing issue during third-party (Apple) sign in in NextJS

## [13.1.1] - 2023-02-24

- Refactor dashboard recipe to use auth mode instead of manually checking for api key
Expand Down
54 changes: 12 additions & 42 deletions lib/build/framework/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,29 +154,16 @@ function assertThatBodyParserHasBeenUsedForExpressLikeRequest(method, request) {
let jsonParser = body_parser_1.json();
let err = yield new Promise((resolve) => {
let resolvedCalled = false;
/**
* Nextjs allow users to disable the default parser.
* To handle that scenario, we are still parsing the request body
*/
if (request.__supertokensFromNextJS === true) {
/**
* the setImmediate here is to counter the next.js issue
* where the json parser would not resolve and thus the request
* just hangs forever. Next.JS does json parsing on its own.
*/
setImmediate(() => {
if (request.readable) {
jsonParser(request, new http_1.ServerResponse(request), (e) => {
if (!resolvedCalled) {
resolvedCalled = true;
resolve(undefined);
resolve(e);
}
});
} else {
resolve(undefined);
}
jsonParser(request, new http_1.ServerResponse(request), (e) => {
if (!resolvedCalled) {
resolvedCalled = true;
resolve(e);
}
});
});
if (err !== undefined) {
throw new error_1.default({
Expand All @@ -192,7 +179,7 @@ function assertThatBodyParserHasBeenUsedForExpressLikeRequest(method, request) {
if (err !== undefined) {
throw new error_1.default({
type: error_1.default.BAD_INPUT_ERROR,
message: "API input error: Please make sure to pass valid URL query params",
message: "API input error: Please make sure to pass valid url encoded form in the request body",
});
}
}
Expand All @@ -204,35 +191,18 @@ function assertFormDataBodyParserHasBeenUsedForExpressLikeRequest(request) {
return __awaiter(this, void 0, void 0, function* () {
let parser = body_parser_1.urlencoded({ extended: true });
let err = yield new Promise((resolve) => {
let resolvedCalled = false;
/**
* Nextjs allow users to disable the default parser.
* To handle that scenario, we are still parsing the request body
*/
if (request.__supertokensFromNextJS === true) {
/**
* the setImmediate here is to counter the next.js issue
* where the json parser would not resolve and thus the request
* just hangs forever. Next.JS does json parsing on its own.
*/
setImmediate(() => {
if (!resolvedCalled) {
resolvedCalled = true;
resolve(undefined);
}
if (request.readable) {
parser(request, new http_1.ServerResponse(request), (e) => {
resolve(e);
});
} else {
resolve(undefined);
}
parser(request, new http_1.ServerResponse(request), (e) => {
if (!resolvedCalled) {
resolvedCalled = true;
resolve(e);
}
});
});
if (err !== undefined) {
throw new error_1.default({
type: error_1.default.BAD_INPUT_ERROR,
message: "API input error: Please make sure to pass valid URL query params",
message: "API input error: Please make sure to pass valid url encoded form in the request body",
});
}
});
Expand Down
2 changes: 1 addition & 1 deletion lib/build/version.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lib/build/version.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

54 changes: 12 additions & 42 deletions lib/ts/framework/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,29 +136,16 @@ export async function assertThatBodyParserHasBeenUsedForExpressLikeRequest(
let jsonParser = json();
let err = await new Promise((resolve) => {
let resolvedCalled = false;
/**
* Nextjs allow users to disable the default parser.
* To handle that scenario, we are still parsing the request body
*/
if (request.__supertokensFromNextJS === true) {
/**
* the setImmediate here is to counter the next.js issue
* where the json parser would not resolve and thus the request
* just hangs forever. Next.JS does json parsing on its own.
*/
setImmediate(() => {
if (request.readable) {
jsonParser(request, new ServerResponse(request), (e) => {
if (!resolvedCalled) {
resolvedCalled = true;
resolve(undefined);
resolve(e);
}
});
} else {
resolve(undefined);
}
jsonParser(request, new ServerResponse(request), (e) => {
if (!resolvedCalled) {
resolvedCalled = true;
resolve(e);
}
});
});
if (err !== undefined) {
throw new STError({
Expand All @@ -174,7 +161,7 @@ export async function assertThatBodyParserHasBeenUsedForExpressLikeRequest(
if (err !== undefined) {
throw new STError({
type: STError.BAD_INPUT_ERROR,
message: "API input error: Please make sure to pass valid URL query params",
message: "API input error: Please make sure to pass valid url encoded form in the request body",
});
}
}
Expand All @@ -186,35 +173,18 @@ export async function assertFormDataBodyParserHasBeenUsedForExpressLikeRequest(
) {
let parser = urlencoded({ extended: true });
let err = await new Promise((resolve) => {
let resolvedCalled = false;
/**
* Nextjs allow users to disable the default parser.
* To handle that scenario, we are still parsing the request body
*/
if (request.__supertokensFromNextJS === true) {
/**
* the setImmediate here is to counter the next.js issue
* where the json parser would not resolve and thus the request
* just hangs forever. Next.JS does json parsing on its own.
*/
setImmediate(() => {
if (!resolvedCalled) {
resolvedCalled = true;
resolve(undefined);
}
if (request.readable) {
parser(request, new ServerResponse(request), (e) => {
resolve(e);
});
} else {
resolve(undefined);
}
parser(request, new ServerResponse(request), (e) => {
if (!resolvedCalled) {
resolvedCalled = true;
resolve(e);
}
});
});
if (err !== undefined) {
throw new STError({
type: STError.BAD_INPUT_ERROR,
message: "API input error: Please make sure to pass valid URL query params",
message: "API input error: Please make sure to pass valid url encoded form in the request body",
});
}
}
Expand Down
2 changes: 1 addition & 1 deletion lib/ts/version.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
export const version = "13.1.1";
export const version = "13.1.2";

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"];

Expand Down
Loading

0 comments on commit a4ffd55

Please sign in to comment.