Here I have implemented axios interceptors for nextjs 14 application. And need help to logout user if any error occurs and redirect user to ‘/login’ page.
I am attaching interceptors code here.
axiosInstance.interceptors.response.use(
(response) => response,
async (error: AxiosError) => {
const originalRequest = error.config;
let session;
if (typeof window !== "undefined") {
// session for client component
session = await getSession();
} else {
// session for server component
session = await getServerSession(authOptions);
}
if (
error.response?.status === 401 ||
error.message === "Request failed with status code 401"
) {
if (session && session.refreshToken) {
try {
const refreshResponse = await axios.post(
`${BASE_URL}/v1/auth/refresh-token`,
{
refreshToken: `${session.refreshToken}avc`,
}
);
const { data } = refreshResponse;
console.log({ data });
if (data.access_token) {
if (originalRequest) {
originalRequest.headers.Authorization = `Bearer ${data.access_token}`;
return await axios(originalRequest);
}
} else {
// code to logout user
}
} catch (e) {
// code to logout user
}
} else {
// code to logout user
}
}
return Promise.reject(error);
}
);
I have tried signOut
from next-auth/react
but it works only in client-component request and not able to logout from server-component request.
New contributor
Parth Nariya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.