完善站点运营设置:分路由管理、登录可见评论、邮件模板内联与关闭注册 SSR。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -452,8 +452,10 @@ export default async function PostDetailPage({ params, searchParams }: PageProps
|
||||
);
|
||||
}
|
||||
|
||||
// 站点设置已在 layout 缓存;关评时不拉评论树,避免首屏 HTML 泄露历史评论
|
||||
const allowComments = (await getPublicSettingsCached()).allow_comments !== false;
|
||||
// 站点设置已在 layout 缓存;关评或「登录可见」且游客时不拉评论树,避免首屏泄露
|
||||
const publicSettings = await getPublicSettingsCached();
|
||||
const allowComments = publicSettings.allow_comments !== false;
|
||||
const commentsRequireLogin = publicSettings.comments_require_login === true;
|
||||
const emptyComments: CommentsResponse = {
|
||||
comments: [],
|
||||
total: 0,
|
||||
@@ -461,12 +463,14 @@ export default async function PostDetailPage({ params, searchParams }: PageProps
|
||||
page: 1,
|
||||
size: 20,
|
||||
};
|
||||
const [commentsData, me, profile, relatedData] = await Promise.all([
|
||||
allowComments ? fetchComments(id, commentPage, cookie) : Promise.resolve(emptyComments),
|
||||
getMeCached(cookie || undefined),
|
||||
const meFirst = await getMeCached(cookie || undefined);
|
||||
const canFetchComments = allowComments && (!commentsRequireLogin || !!meFirst.user);
|
||||
const [commentsData, profile, relatedData] = await Promise.all([
|
||||
canFetchComments ? fetchComments(id, commentPage, cookie) : Promise.resolve(emptyComments),
|
||||
fetchUserProfile(String(post.user.id), 1, cookie).catch(() => null),
|
||||
fetchPosts(1, 8, post.board_id, "recommended", "", false, cookie).catch(() => null),
|
||||
]);
|
||||
const me = meFirst;
|
||||
const comments = commentsData.comments;
|
||||
const related = (relatedData?.posts ?? []).filter((p) => p.id !== post.id).slice(0, 5);
|
||||
const authorPosts = (profile?.posts ?? []).filter((p) => p.id !== post.id).slice(0, 5);
|
||||
@@ -517,7 +521,7 @@ export default async function PostDetailPage({ params, searchParams }: PageProps
|
||||
absoluteCanonical(`/post/${post.id}`, commentPage > 1 ? { page: commentPage } : undefined) ||
|
||||
entityUrl;
|
||||
const authorName = post.user.nickname || post.user.username;
|
||||
const visibleFloors: JsonLdVisibleComment[] = allowComments
|
||||
const visibleFloors: JsonLdVisibleComment[] = canFetchComments
|
||||
? comments
|
||||
.filter((c) => !c.deleted && (c.content || "").trim())
|
||||
.map((c) => ({
|
||||
@@ -530,7 +534,7 @@ export default async function PostDetailPage({ params, searchParams }: PageProps
|
||||
}))
|
||||
: [];
|
||||
const acceptedForLd: JsonLdVisibleComment | null =
|
||||
allowComments && acceptedAnswer && !acceptedAnswer.deleted && acceptedAnswer.content?.trim()
|
||||
canFetchComments && acceptedAnswer && !acceptedAnswer.deleted && acceptedAnswer.content?.trim()
|
||||
? {
|
||||
id: acceptedAnswer.id,
|
||||
content: acceptedAnswer.content,
|
||||
@@ -565,7 +569,7 @@ export default async function PostDetailPage({ params, searchParams }: PageProps
|
||||
author: { id: post.user.id, name: authorName },
|
||||
postId: post.id,
|
||||
pageUrl,
|
||||
commentCount: allowComments ? post.comment_count : undefined,
|
||||
commentCount: canFetchComments ? post.comment_count : undefined,
|
||||
viewCount: post.view_count,
|
||||
comments: visibleFloors,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user