fix(api): implement CSRF token handling for refresh token requests

This commit is contained in:
hamster1963
2026-06-15 18:45:29 +08:00
parent 5720af9108
commit f536d4ecf5
+24 -1
View File
@@ -11,6 +11,22 @@ import type {
let lastestRefreshTokenAt = 0; let lastestRefreshTokenAt = 0;
const getCookieValue = (name: string): string | undefined => {
const cookie = document.cookie
.split("; ")
.find((item) => item.startsWith(`${name}=`));
if (!cookie) {
return undefined;
}
return decodeURIComponent(cookie.split("=").slice(1).join("="));
};
const getCsrfToken = (): string => {
return getCookieValue("nz-csrf") || "";
};
export const fetchServerGroup = async (): Promise<ServerGroupResponse> => { export const fetchServerGroup = async (): Promise<ServerGroupResponse> => {
const response = await fetch("/api/v1/server-group"); const response = await fetch("/api/v1/server-group");
const data = await response.json(); const data = await response.json();
@@ -34,7 +50,14 @@ export const fetchLoginUser = async (): Promise<LoginUserResponse> => {
Date.now() - lastestRefreshTokenAt > 1000 * 60 * 60) Date.now() - lastestRefreshTokenAt > 1000 * 60 * 60)
) { ) {
lastestRefreshTokenAt = Date.now(); lastestRefreshTokenAt = Date.now();
fetch("/api/v1/refresh-token"); const csrfToken = getCsrfToken();
console.log("Refreshing token with CSRF token:", csrfToken);
fetch("/api/v1/refresh-token", {
method: "POST",
headers: {
"X-CSRF-Token": csrfToken,
},
});
} }
return data; return data;