From f82fc0fb77f7acd85320e64f61ef1738700c2dfe Mon Sep 17 00:00:00 2001 From: tone <3341154833@qq.com> Date: Mon, 23 Jun 2025 01:12:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=87=A0=E4=B8=AAda?= =?UTF-8?q?mn=E7=9A=84bug=EF=BC=8C=E7=BB=88=E4=BA=8E=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AB=AF=E8=AE=BF=E9=97=AE=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tone-page-server/src/blog/blog.controller.ts | 5 +++-- .../app/(with-header-footer)/blog/[id]/page.tsx | 13 +++++++++---- tone-page-web/lib/api/blog/get.ts | 7 +++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/tone-page-server/src/blog/blog.controller.ts b/tone-page-server/src/blog/blog.controller.ts index d8c7c15..c68cea4 100644 --- a/tone-page-server/src/blog/blog.controller.ts +++ b/tone-page-server/src/blog/blog.controller.ts @@ -6,6 +6,7 @@ import { Param, ParseUUIDPipe, Post, + Query, Req, UseGuards, } from '@nestjs/common'; @@ -31,14 +32,14 @@ export class BlogController { @Get(':id') async getBlog( @Param('id', new ParseUUIDPipe({ version: '4' })) id: string, - @Param('p') password: string, + @Query('p') password?: string, ) { const blog = await this.blogService.findById(id); if (!blog) throw new BadRequestException('文章不存在或无权限访问'); if (!blog.permissions.includes(BlogPermission.Public)) { // 无公开权限,则进一步检查是否有密码保护 - if (blog.permissions.includes(BlogPermission.ByPassword)) { + if (!blog.permissions.includes(BlogPermission.ByPassword)) { throw new BadRequestException('文章不存在或无权限访问'); } else { // 判断密码是否正确 diff --git a/tone-page-web/app/(with-header-footer)/blog/[id]/page.tsx b/tone-page-web/app/(with-header-footer)/blog/[id]/page.tsx index ef6825a..9e8018d 100644 --- a/tone-page-web/app/(with-header-footer)/blog/[id]/page.tsx +++ b/tone-page-web/app/(with-header-footer)/blog/[id]/page.tsx @@ -2,7 +2,7 @@ import { BlogApi } from "@/lib/api"; import { base62 } from "@/lib/utils"; -import { useParams } from "next/navigation"; +import { useParams, useSearchParams } from "next/navigation"; import useSWR from "swr"; import ReactMarkdown from 'react-markdown' import remarkGfm from 'remark-gfm' @@ -17,6 +17,8 @@ import Image from "next/image"; export default function Blog() { const params = useParams(); + const searchParams = useSearchParams(); + const hex = Array.from(base62.decode(params.id as string)).map(b => b.toString(16).padStart(2, '0')).join(''); const id = [ hex.slice(0, 8), @@ -26,9 +28,12 @@ export default function Blog() { hex.slice(20, 32) ].join('-'); + const password = searchParams.get('p'); const { data, error, isLoading } = useSWR( `/api/blog/${id}`, - () => BlogApi.get(id), + () => BlogApi.get(id, { + password: password || undefined, + }), ) return ( @@ -59,9 +64,9 @@ export default function Blog() { h5: ({ ...props }) =>
, p: ({ ...props }) =>

, img: ({ src }) => ( - + - 加载失败 + 加载失败 ), diff --git a/tone-page-web/lib/api/blog/get.ts b/tone-page-web/lib/api/blog/get.ts index 9cf4d83..dd456dd 100644 --- a/tone-page-web/lib/api/blog/get.ts +++ b/tone-page-web/lib/api/blog/get.ts @@ -1,10 +1,13 @@ import fetcher from "../fetcher"; -export async function get(id: string) { +export async function get(id: string, option: { + password?: string; +} = {}) { + const { password } = option; return fetcher<{ id: string; title: string; createdAt: string; content: string; - }>(`/api/blog/${id}`); + }>(`/api/blog/${id}` + (password ? `?p=${password}` : '')); } \ No newline at end of file