diff --git a/src/backend/langflow/api/v1/login.py b/src/backend/langflow/api/v1/login.py index d2e031a63..ecc0fea6a 100644 --- a/src/backend/langflow/api/v1/login.py +++ b/src/backend/langflow/api/v1/login.py @@ -98,7 +98,7 @@ async def refresh_token(request: Request, response: Response, settings_service=D response.set_cookie( "refresh_token_lf", tokens["refresh_token"], - httponly=auth_settings.REFRESH_TOKEN_HTTPONLY, + httponly=auth_settings.REFRESH_HTTPONLY, samesite=auth_settings.REFRESH_SAME_SITE, secure=auth_settings.REFRESH_SECURE, expires=auth_settings.REFRESH_TOKEN_EXPIRE_MINUTES * 60, diff --git a/src/frontend/src/controllers/API/api.tsx b/src/frontend/src/controllers/API/api.tsx index 7f3cb38d2..c64d8df07 100644 --- a/src/frontend/src/controllers/API/api.tsx +++ b/src/frontend/src/controllers/API/api.tsx @@ -1,7 +1,6 @@ import axios, { AxiosError, AxiosInstance } from "axios"; import { useContext, useEffect } from "react"; import { Cookies } from "react-cookie"; -import { useNavigate } from "react-router-dom"; import { renewAccessToken } from "."; import { BuildStatus } from "../../constants/enums"; import { AuthContext } from "../../contexts/authContext"; @@ -17,26 +16,25 @@ function ApiInterceptor() { const setErrorData = useAlertStore((state) => state.setErrorData); let { accessToken, login, logout, authenticationErrorCount, autoLogin } = useContext(AuthContext); - const navigate = useNavigate(); const cookies = new Cookies(); useEffect(() => { const interceptor = api.interceptors.response.use( (response) => response, async (error: AxiosError) => { - if (error.response?.status === 401) { - const accessToken = cookies.get("access_token_lf"); - - if (accessToken && !autoLogin) { + if (error.response?.status === 403 || error.response?.status === 401) { + if (!autoLogin) { checkErrorCount(); - await tryToRenewAccessToken(error); - } + const acceptedRequest = await tryToRenewAccessToken(error); - if (!accessToken && error?.config?.url?.includes("login")) { - return Promise.reject(error); - } + const accessToken = cookies.get("access_token_lf"); - return logout(); + if (!accessToken && error?.config?.url?.includes("login")) { + return Promise.reject(error); + } + + return acceptedRequest; + } } await clearBuildVerticesState(error); return Promise.reject(error); @@ -116,6 +114,7 @@ function ApiInterceptor() { return response; } } catch (error) { + clearBuildVerticesState(error); logout(); } } diff --git a/src/frontend/src/pages/StorePage/index.tsx b/src/frontend/src/pages/StorePage/index.tsx index aa1910712..412dd1a68 100644 --- a/src/frontend/src/pages/StorePage/index.tsx +++ b/src/frontend/src/pages/StorePage/index.tsx @@ -147,7 +147,7 @@ export default function StorePage(): JSX.Element { } }) .catch((err) => { - if (err.response.status === 403 || err.response.status === 401) { + if (err.response?.status === 403 || err.response?.status === 401) { setValidApiKey(false); } else { setSearchData([]);