diff --git "a/src/app/reward/reward-detail/\133rewardId\135/page.tsx" "b/src/app/reward/reward-detail/\133rewardId\135/page.tsx"
index fb8f8b1..0ba1a04 100644
--- "a/src/app/reward/reward-detail/\133rewardId\135/page.tsx"
+++ "b/src/app/reward/reward-detail/\133rewardId\135/page.tsx"
@@ -16,9 +16,12 @@
 import { Paginator, type PaginatorPageChangeEvent } from 'primereact/paginator';
 // 消息提醒
 import { Toast } from 'primereact/toast';
+import { useLocalStorage } from '../../../hook/useLocalStorage';
 // 样式
 import './reward-detail.scss';
-
+interface User {
+    Id: number;
+}
 
 // 评论信息
 interface Comment {
@@ -69,6 +72,8 @@
 
 //帖子详情界面
 export default function RewardDetailPage() {
+    const user = useLocalStorage<User>('user');
+    const userId: number = user?.Id ?? -1;
     // 获取URL参数，页面跳转
     const params = useParams<{ rewardId: string }>()
     const rewardId = decodeURIComponent(params.rewardId); // 防止中文路径乱码
@@ -105,7 +110,7 @@
 
     const fetchRewardInfo = async () => {
         try {
-            const { data } = await axios.get(process.env.PUBLIC_URL +`/reward/info?rewardId=${rewardId}`);
+            const { data } = await axios.get(process.env.PUBLIC_URL + `/reward/info?rewardId=${rewardId}`);
             setRewardInfo(data);
         } catch (err) {
             console.error(err);
@@ -117,7 +122,7 @@
     useEffect(() => {
         if (!rewardInfo) return;
         // 发帖人
-        axios.get(process.env.PUBLIC_URL +`/user/info?userId=${rewardInfo.userId}`)
+        axios.get(process.env.PUBLIC_URL + `/user/info?userId=${rewardInfo.userId}`)
             .then(res => setUserInfo(res.data))
             .catch(console.error);
     }, [rewardInfo]);
@@ -145,7 +150,7 @@
             const pageNumber = first / rows + 1;
             console.log("当前页" + pageNumber + "size" + rows);
             const response = await axios.get<CommentList>(
-                process.env.PUBLIC_URL +`/comments`, {
+                process.env.PUBLIC_URL + `/comments`, {
                 params: { id: rewardId, pageNumber, rows, type: 'reward' }
             }
             );
@@ -156,7 +161,7 @@
             response.data.records.forEach(comment => {
                 if (comment.userId != null && !commentUserInfos.has(comment.userId)) {
                     axios.get<UserInfo>(
-                        process.env.PUBLIC_URL +`/user/info`,
+                        process.env.PUBLIC_URL + `/user/info`,
                         { params: { userId: comment.userId } }
                     ).then(res => {
                         setCommentUserInfos(prev => new Map(prev).set(comment.userId!, res.data));
@@ -175,7 +180,7 @@
         console.log('发布评论:', commentId);
         try {
             const newComment: NewComment = {
-                userId: 22301145,
+                userId,
                 rewardId: rewardInfo.rewardId,
                 threadId: 0,
                 resourceId: 0,
@@ -184,7 +189,7 @@
                 createAt: new Date().toISOString().slice(0, 19).replace('T', ' ')
             };
 
-            const response = await axios.post(process.env.PUBLIC_URL +'/comment', newComment);
+            const response = await axios.post(process.env.PUBLIC_URL + '/comment', newComment);
 
             if (response.status === 200) {
                 toast.current?.show({ severity: 'success', summary: 'Success', detail: '回复成功' });
@@ -206,7 +211,7 @@
 
         try {
             const newComment: NewComment = {
-                userId: 22301145,
+                userId,
                 rewardId: rewardInfo.rewardId,
                 threadId: 0,
                 resourceId: 0,
@@ -215,7 +220,7 @@
                 createAt: new Date().toISOString().slice(0, 19).replace('T', ' ')
             };
 
-            const response = await axios.post(process.env.PUBLIC_URL +'/comment', newComment);
+            const response = await axios.post(process.env.PUBLIC_URL + '/comment', newComment);
 
             if (response.status === 200) {
                 toast.current?.show({ severity: 'success', summary: 'Success', detail: '评论成功' });
@@ -237,7 +242,7 @@
         try {
             // 调用 DELETE 接口，URL 中最后一段是要删除的 commentId
             const response = await axios.delete(
-                process.env.PUBLIC_URL +`/comment?commentId=${commentId}`
+                process.env.PUBLIC_URL + `/comment?commentId=${commentId}`
             );
 
             if (response.status === 200) {
@@ -338,7 +343,7 @@
                                     if (el) ops.current[index] = el;
                                 }}>
                                 <Button label="回复" text size="small" onClick={() => setVisibleReply(true)} />
-                                {comment.userId === 22301145 &&
+                                {comment.userId === userId &&
                                     <Button
                                         label="删除"
                                         text
