Skip to content

Commit 0bc24ad

Browse files
authored
fix: AuthContext에 userId 추가 및 결제 요청 시 userId 누락 문제 수정 (#411)
1 parent 9c50619 commit 0bc24ad

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

src/contexts/AuthContext.jsx

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,12 @@ export const AuthProvider = ({ children }) => {
2020
return localStorage.getItem("userNickname") || "username";
2121
});
2222
const [isAdmin, setIsAdmin] = useState(false);
23+
const [userId, setUserId] = useState(null);
2324

2425
const location = useLocation();
2526

26-
const parseIsAdmin = (token) => {
27-
if (!token) {
28-
return false;
29-
}
27+
const parseToken = (token) => {
28+
if (!token) return null;
3029
try {
3130
const base64Url = token.split(".")[1];
3231
const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
@@ -36,18 +35,30 @@ export const AuthProvider = ({ children }) => {
3635
.map((c) => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2))
3736
.join("")
3837
);
39-
const payload = JSON.parse(jsonPayload);
40-
return payload?.auth ?? false;
38+
return JSON.parse(jsonPayload);
4139
} catch (e) {
42-
return false;
40+
return null;
4341
}
4442
};
4543

44+
const parseIsAdmin = (token) => {
45+
const payload = parseToken(token);
46+
return payload?.auth ?? false;
47+
};
48+
49+
const parseUserId = (token) => {
50+
const payload = parseToken(token);
51+
// 백엔드 JWT 페이로드 구조에 맞게 필드 선택!
52+
// 예: payload.userId 또는 payload.id 또는 payload.sub
53+
return payload?.id ?? payload?.sub ?? null;
54+
};
55+
4656
useEffect(() => {
4757
const accessToken = Cookies.get("accessToken");
4858
const refreshToken = Cookies.get("refreshToken");
4959
setIsAuthenticated(!!accessToken && !!refreshToken);
5060
setIsAdmin(parseIsAdmin(accessToken));
61+
setUserId(parseUserId(accessToken));
5162
}, [location]);
5263

5364
const login = (accessToken, refreshToken, userNickname) => {
@@ -67,6 +78,7 @@ export const AuthProvider = ({ children }) => {
6778

6879
setIsAuthenticated(true);
6980
setIsAdmin(parseIsAdmin(accessToken));
81+
setUserId(parseUserId(accessToken));
7082
};
7183

7284
const logout = () => {
@@ -78,6 +90,7 @@ export const AuthProvider = ({ children }) => {
7890

7991
setIsAuthenticated(false);
8092
setIsAdmin(false);
93+
setUserId(null);
8194
};
8295

8396
const refreshAccessToken = async () => {
@@ -105,6 +118,7 @@ export const AuthProvider = ({ children }) => {
105118
});
106119
setIsAuthenticated(true);
107120
setIsAdmin(parseIsAdmin(accessToken));
121+
setUserId(parseUserId(accessToken));
108122
return accessToken;
109123
} catch (error) {
110124
console.error("Access token refresh failed:", error);
@@ -128,6 +142,7 @@ export const AuthProvider = ({ children }) => {
128142
isAuthenticated,
129143
isAdmin,
130144
userNickname,
145+
userId,
131146
login,
132147
logout,
133148
refreshAccessToken,

src/pages/payment/Purchase.jsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ import PurchaseMethodBtn from "@/components/purchase/PurchaseMethodBtn";
3434
import AuthContext from "@/contexts/AuthContext";
3535

3636
const Purchase = () => {
37-
const { user } = useContext(AuthContext);
37+
const { userId } = useContext(AuthContext);
38+
console.log(user);
3839
const [thumbnailImg, setThumbnailImg] = useState("");
3940
const [title, setTitle] = useState("");
4041
const [author, setAuthor] = useState("");
@@ -207,7 +208,7 @@ const Purchase = () => {
207208
},
208209
],
209210
paymentMethod: payableAmount === 0 ? 0 : 1, // 0원: 0, 유료: 1,
210-
userId: user?.id,
211+
userId,
211212
};
212213

213214
if (buyPerform) {
@@ -268,6 +269,7 @@ const Purchase = () => {
268269
JSON.stringify(requestBody)
269270
);
270271

272+
271273
requestPay({
272274
clientId: import.meta.env.VITE_NICEPAY_CLIENT_KEY,
273275
method: nicepayMethod, // 'card' | 'bank' | 'vbank'

0 commit comments

Comments
 (0)