bugfix: check if user exists before create a new refresh token (#3076)

check if user exists before create a new refresh token
This commit is contained in:
Cristhian Zanforlin Lousa 2024-07-31 16:50:10 -03:00 • committed by GitHub
commit d7aed90e5d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 35 additions and 19 deletions

View file

@ -129,13 +129,14 @@ async def refresh_token(
request: Request, request: Request,
response: Response, response: Response,
settings_service: "SettingsService" = Depends(get_settings_service), settings_service: "SettingsService" = Depends(get_settings_service),
db: Session = Depends(get_session),
): ):
auth_settings = settings_service.auth_settings auth_settings = settings_service.auth_settings
token = request.cookies.get("refresh_token_lf") token = request.cookies.get("refresh_token_lf")
if token: if token:
tokens = create_refresh_token(token) tokens = create_refresh_token(token, db)
response.set_cookie( response.set_cookie(
"refresh_token_lf", "refresh_token_lf",
tokens["refresh_token"], tokens["refresh_token"],

View file

@ -305,7 +305,13 @@ def create_refresh_token(refresh_token: str, db: Session = Depends(get_session))
) )
user_id: UUID = payload.get("sub") # type: ignore user_id: UUID = payload.get("sub") # type: ignore
token_type: str = payload.get("type") # type: ignore token_type: str = payload.get("type") # type: ignore
if user_id is None or token_type is None:
if user_id is None or token_type == "":
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid refresh token")
user_exists = get_user_by_id(db, user_id)
if user_exists is None:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid refresh token") raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid refresh token")
return create_user_tokens(user_id, db) return create_user_tokens(user_id, db)

View file

@ -46,18 +46,18 @@ function ApiInterceptor() {
await tryToRenewAccessToken(error); await tryToRenewAccessToken(error);
const accessToken = cookies.get(LANGFLOW_ACCESS_TOKEN); const accessToken = cookies.get(LANGFLOW_ACCESS_TOKEN);
if (!accessToken && error?.config?.url?.includes("login")) { if (!accessToken && error?.config?.url?.includes("login")) {
return Promise.reject(error); return Promise.reject(error);
} }
await remakeRequest(error);
setSaveLoading(false);
authenticationErrorCount = 0;
} }
} }
await clearBuildVerticesState(error); await clearBuildVerticesState(error);
return Promise.reject(error); if (
error?.response?.status !== 401 &&
error?.response?.status !== 403
) {
return Promise.reject(error);
}
}, },
); );
@ -141,21 +141,30 @@ function ApiInterceptor() {
} }
async function tryToRenewAccessToken(error: AxiosError) { async function tryToRenewAccessToken(error: AxiosError) {
try { if (window.location.pathname.includes("/login")) return;
if (window.location.pathname.includes("/login")) return; mutationRenewAccessToken(
mutationRenewAccessToken({}); {},
} catch (error) { {
clearBuildVerticesState(error); onSuccess: async (data) => {
mutationLogout(undefined, { authenticationErrorCount = 0;
onSuccess: () => { await remakeRequest(error);
logout(); setSaveLoading(false);
authenticationErrorCount = 0;
}, },
onError: (error) => { onError: (error) => {
console.error(error); console.error(error);
mutationLogout(undefined, {
onSuccess: () => {
logout();
},
onError: (error) => {
console.error(error);
},
});
return Promise.reject("Authentication error");
}, },
}); },
return Promise.reject("Authentication error"); );
}
} }
async function clearBuildVerticesState(error) { async function clearBuildVerticesState(error) {