"use server"; import { cookies } from "next/heade...
Creato il: 3 marzo 2025
Risposto usando O3 Mini High da Chat01
Creato il: 3 marzo 2025
Risposto usando O3 Mini High da Chat01
"use server";
import { cookies } from "next/headers";
// import axios from "axios";
// Optional: Switch the Refresh Call to Axios
/**
const refreshToken = await getRefreshToken();
if (!refreshToken) {
// If there's no refresh token, just reset cookies and return
await resetAuthCookies();
return null;
}
try {
// You could switch this to axios if you prefer, but since
// this is a server-side call, using fetch is also fine.
const response = await fetch("http://localhost:8000/api/auth/token/refresh/", {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
body: JSON.stringify({ refresh: refreshToken }),
});
textconst data = await response.json(); console.log("Response - Refresh:", data); if (data?.access) { // Store new access token in the cookies const cookieStore = cookies(); cookieStore.set("session_access_token", data.access, { httpOnly: true, secure: false, maxAge: 60 * 60, // 60 minutes path: "/", }); return data.access; } else { // If refresh fails or no "access" in response, reset everything await resetAuthCookies(); return null; }
} catch (error) {
console.error("Refresh error:", error);
await resetAuthCookies();
return null;
}
}
/**
cookieStore.set("session_userid", userId, {
httpOnly: true,
secure: false,
maxAge: 60 * 60 * 24 * 7, // One week
path: "/",
});
cookieStore.set("session_access_token", accessToken, {
httpOnly: true,
secure: false,
maxAge: 60 * 60, // 60 minutes
path: "/",
});
cookieStore.set("session_refresh_token", refreshToken, {
httpOnly: true,
secure: false,
maxAge: 60 * 60 * 24 * 7, // One week
path: "/",
});
}
/**
cookieStore.set("session_userid", "", { path: "/" });
cookieStore.set("session_access_token", "", { path: "/" });
cookieStore.set("session_refresh_token", "", { path: "/" });
}
/**
/**
if (!accessToken) {
accessToken = await handleRefresh();
}
return accessToken;
}
/**
[{
"resource": "/home/utopia/BSD/bsd/app/lib/actions.ts",
"owner": "typescript",
"code": "2339",
"severity": 8,
"message": "Property 'set' does not exist on type 'Promise<ReadonlyRequestCookies>'.",
"source": "ts",
"startLineNumber": 40,
"startColumn": 19,
"endLineNumber": 40,
"endColumn": 22,
"relatedInformation": [
{
"startLineNumber": 40,
"startColumn": 19,
"endLineNumber": 40,
"endColumn": 22,
"message": "Did you forget to use 'await'?",
"resource": "/home/utopia/BSD/bsd/app/lib/actions.ts"
}
]
}]
The error occurs because the call to cookies()
returns a promise, and you need to await that promise before using its methods. TypeScript indicates that you're trying to call .set
on a promise rather than on the resolved cookie store object.
To fix this, change your code from:
typescriptconst cookieStore = cookies(); cookieStore.set("session_userid", userId, { ... });
to:
typescriptconst cookieStore = await cookies(); cookieStore.set("session_userid", userId, { ... });
This ensures that cookieStore
is the resolved object that contains the .set
method, rather than a promise.