Skip to content

Conversation

@miya
Copy link
Member

@miya miya commented Nov 26, 2025

@miya miya requested a review from yuki-takei November 26, 2025 09:11
@miya miya self-assigned this Nov 26, 2025

// call superjson custom register
registerPageToShowRevisionWithMeta();
registerShareLinkRelatedPage();
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

問題2 (スコープ外)

shared page にアクセスしようとするとエラーになる

エラー

Server Error
Error: Error serializing `.page` returned from `getServerSideProps` in "/share/[[...path]]".
Reason: `object` ("[object Object]") cannot be serialized as JSON. Please only return JSON serializable data types.

This error happened while generating the page. Any console logs will be displayed in the terminal window.
Call Stack
isSerializable
webpack:/dist/esm/lib/is-serializable-props.js
every
webpack:/dist/esm/lib/is-serializable-props.js
Array.every
<anonymous>
r
webpack:/dist/esm/lib/is-serializable-props.js
isSerializableProps
webpack:/dist/esm/lib/is-serializable-props.js
e8
webpack:/dist/esm/server/render.js
async doRender
file:///workspace/growi/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected]_react-_5d5e9ca1ee36dcc657c303d88c1f04ef/node_modules/next/src/server/base-server.ts (2315:20)
async cacheEntry.responseCache.get.routeKind
file:///workspace/growi/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected]_react-_5d5e9ca1ee36dcc657c303d88c1f04ef/node_modules/next/src/server/base-server.ts (2569:24)
async DevServer.renderToResponseWithComponentsImpl
file:///workspace/growi/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected]_react-_5d5e9ca1ee36dcc657c303d88c1f04ef/node_modules/next/src/server/base-server.ts (2432:24)
async DevServer.renderPageComponent
file:///workspace/growi/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected]_react-_5d5e9ca1ee36dcc657c303d88c1f04ef/node_modules/next/src/server/base-server.ts (3016:16)
async DevServer.renderToResponseImpl
file:///workspace/growi/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected]_react-_5d5e9ca1ee36dcc657c303d88c1f04ef/node_modules/next/src/server/base-server.ts (3078:24)
async DevServer.pipeImpl
file:///workspace/growi/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected]_react-_5d5e9ca1ee36dcc657c303d88c1f04ef/node_modules/next/src/server/base-server.ts (1537:21)
async DevServer.NextNodeServer.handleCatchallRenderRequest
file:///workspace/growi/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected]_react-_5d5e9ca1ee36dcc657c303d88c1f04ef/node_modules/next/src/server/next-server.ts (1020:7)
async DevServer.handleRequestImpl
file:///workspace/growi/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected]_react-_5d5e9ca1ee36dcc657c303d88c1f04ef/node_modules/next/src/server/base-server.ts (1318:9)

原因

getServerSideProps で呼んでいる シリアライザーが通常ページ用の者だったことが原因

修正方法

旧実装 (master) を参考に shared page 用のシリアライザーを新設

参考

superjson.registerCustom<IShareLinkRelatedPage, string>(
{
isApplicable: (v): v is IShareLinkRelatedPage => {
return v != null && v.toObject != null;
},
serialize: (v) => {
return superjson.stringify(v.toObject());
},
deserialize: (v) => {
return superjson.parse(v);
},
},
'IShareLinkRelatedPageTransformer',
);

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

page-data-props.ts で返す page を通常ページにあわせて pageWithMeta にしたら専用 serializer 不要になるんじゃないかな

pageService.findPageAndMetaDataByViewer は、第4引数が isSharedPage?: boolean

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

共通の serializer を利用するように修正しました


// call superjson custom register
registerPageToShowRevisionWithMeta();
registerShareLinkRelatedPage();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

page-data-props.ts で返す page を通常ページにあわせて pageWithMeta にしたら専用 serializer 不要になるんじゃないかな

pageService.findPageAndMetaDataByViewer は、第4引数が isSharedPage?: boolean

@miya miya requested a review from yuki-takei November 27, 2025 02:48
isExpired: undefined,
shareLink: undefined,
},
};
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

notFound 時の戻り値を共通化

// expired
if (shareLink.isExpired()) {
const populatedPage =
await pageWithMeta.data.populateDataToShowRevision(true); //shouldExcludeBody = false,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

exipired 時は revisionBody 以外を populate して返却


// call superjson custom register
registerPageToShowRevisionWithMeta();
registerShareLinkRelatedPage();
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

共通の serializer を利用するように修正しました

@yuki-takei yuki-takei merged commit 65f53e8 into dev/7.4.x Nov 27, 2025
16 checks passed
@yuki-takei yuki-takei deleted the fix/174433-accessing-share-link-redirects-to-login-page branch November 27, 2025 20:22
@github-actions github-actions bot mentioned this pull request Nov 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants