diff --git a/src/app/reward/page.tsx b/src/app/reward/page.tsx
index 59abf97..b53d93c 100644
--- a/src/app/reward/page.tsx
+++ b/src/app/reward/page.tsx
@@ -20,9 +20,12 @@
 // 防抖函数
 import { debounce } from 'lodash';
 import { TabView, TabPanel } from 'primereact/tabview';
+import { useLocalStorage } from '../hook/useLocalStorage';
 // 样式
 import './reward.scss';
-
+interface User {
+    Id: number;
+}
 // 悬赏列表数据
 interface Reward {
     rewardId: number;
@@ -41,6 +44,8 @@
 
 // 社区详情页面
 export default function RewardDetailPage() {
+    const user = useLocalStorage<User>('user');
+    const userId: number = user?.Id ?? -1;
     // 页面跳转
     const router = useRouter();
     // 帖子列表数据
@@ -106,7 +111,7 @@
         try {
             const currentDate = new Date().toISOString();
             const postData = {
-                userId: 22301145, // 记得用户登录状态获取
+                userId, // 记得用户登录状态获取
                 rewardPicture: formData.rewardPicture,
                 rewardName: formData.rewardName,
                 rewardDescription: formData.rewardDescription,
@@ -248,7 +253,7 @@
                         <FileUpload
                             mode="basic"
                             name="thread-image"
-                            url={process.env.PUBLIC_URL +"/file"} // 与后端交互的URL
+                            url={process.env.PUBLIC_URL + "/file"} // 与后端交互的URL
                             accept="image/*"
                             maxFileSize={10000000000}
                             chooseLabel="选择悬赏封面"
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
