При логине с сервака приходит пара токенов accessToken и refreshToken.
В инспекторе refreshToken корректно отображается в куках, на нём стоит httpOnly.
Но при попытке обновить accessToken, refreshToken с куки не отправляется.
Вот мидлвар аксиоса:
const instance = axios.create({
baseURL: BASE_URL,
});
instance.interceptors.request.use((config) => {
config.headers.Authorization = `Bearer ${localStorage.getItem("accessToken")}`;
return config;
});
instance.interceptors.response.use(
(response) => {
return response;
},
async (error) => {
const originalRequest = { ...error.config };
originalRequest._isRetry = true;
if (error.response.status === 401 && error.config && !error.config._isRetry) {
try {
const response = await instance.get(`${BASE_URL}/user/refresh-token`);
localStorage.setItem("accessToken", response.data.accessToken);
return instance.request(originalRequest);
} catch (error) {
console.log("Auth error");
}
}
throw error;
}
);
Сам роут на серваке для рефреша:
export const refreshToken = async (req, res) => {
try {
const refreshToken = req.cookies.refreshToken;
if (!refreshToken) {
return res.status(401).json({ message: "Refresh Token не найден" });
}
const decoded = jwt.verify(refreshToken, process.env.JWT_REFRESH_SECRET);
const accessToken = jwt.sign({ userId: decoded.userId }, process.env.JWT_SECRET, {
expiresIn: "30m",
});
res.status(200).json({ accessToken });
} catch (err) {
res.status(500).json({
message: "Server error",
error: err.message,
});
}
};