mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-30 15:18:50 +01:00
🔒 fix: Robust Cache Reset on User Logout (#1324)
* refactor(Logout): rely on hooks for mutation behavior * fix: logging out now correctly resets cache, disallowing any cache mixing between the next logged in user on the same browser * chore: remove additional localStorage values on logout
This commit is contained in:
parent
583e978a82
commit
968b8ccdbd
10 changed files with 109 additions and 90 deletions
|
|
@ -1,5 +1,5 @@
|
|||
import * as f from './types/files';
|
||||
import * as p from './types/presets';
|
||||
import * as m from './types/mutations';
|
||||
import * as a from './types/assistants';
|
||||
import * as t from './types';
|
||||
import * as s from './schemas';
|
||||
|
|
@ -82,7 +82,7 @@ export function updatePreset(payload: s.TPreset): Promise<s.TPreset> {
|
|||
return request.post(endpoints.presets(), payload);
|
||||
}
|
||||
|
||||
export function deletePreset(arg: s.TPreset | undefined): Promise<p.PresetDeleteResponse> {
|
||||
export function deletePreset(arg: s.TPreset | undefined): Promise<m.PresetDeleteResponse> {
|
||||
return request.post(endpoints.deletePreset(), arg);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
export * from './types';
|
||||
export * from './types/assistants';
|
||||
export * from './types/files';
|
||||
export * from './types/presets';
|
||||
export * from './types/mutations';
|
||||
/*
|
||||
* react query
|
||||
* TODO: move to client, or move schemas/types to their own package
|
||||
|
|
|
|||
|
|
@ -23,4 +23,5 @@ export enum MutationKeys {
|
|||
fileDelete = 'fileDelete',
|
||||
updatePreset = 'updatePreset',
|
||||
deletePreset = 'deletePreset',
|
||||
logoutUser = 'logoutUser',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import {
|
|||
} from '@tanstack/react-query';
|
||||
import * as t from './types';
|
||||
import * as s from './schemas';
|
||||
import * as p from './types/presets';
|
||||
import * as m from './types/mutations';
|
||||
import * as dataService from './data-service';
|
||||
import request from './request';
|
||||
import { QueryKeys } from './keys';
|
||||
|
|
@ -306,19 +306,8 @@ export const useUpdatePresetMutation = (): UseMutationResult<
|
|||
});
|
||||
};
|
||||
|
||||
export const useGetPresetsQuery = (
|
||||
config?: UseQueryOptions<s.TPreset[]>,
|
||||
): QueryObserverResult<s.TPreset[], unknown> => {
|
||||
return useQuery<s.TPreset[]>([QueryKeys.presets], () => dataService.getPresets(), {
|
||||
refetchOnWindowFocus: false,
|
||||
refetchOnReconnect: false,
|
||||
refetchOnMount: false,
|
||||
...config,
|
||||
});
|
||||
};
|
||||
|
||||
export const useDeletePresetMutation = (): UseMutationResult<
|
||||
p.PresetDeleteResponse,
|
||||
m.PresetDeleteResponse,
|
||||
unknown,
|
||||
s.TPreset | undefined,
|
||||
unknown
|
||||
|
|
@ -370,14 +359,8 @@ export const useLoginUserMutation = (): UseMutationResult<
|
|||
> => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation((payload: t.TLoginUser) => dataService.login(payload), {
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries([QueryKeys.user]);
|
||||
queryClient.invalidateQueries([QueryKeys.presets]);
|
||||
queryClient.invalidateQueries([QueryKeys.conversation]);
|
||||
queryClient.invalidateQueries([QueryKeys.allConversations]);
|
||||
},
|
||||
onMutate: () => {
|
||||
queryClient.invalidateQueries([QueryKeys.models]);
|
||||
queryClient.removeQueries();
|
||||
},
|
||||
});
|
||||
};
|
||||
|
|
@ -396,15 +379,6 @@ export const useRegisterUserMutation = (): UseMutationResult<
|
|||
});
|
||||
};
|
||||
|
||||
export const useLogoutUserMutation = (): UseMutationResult<unknown> => {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation(() => dataService.logout(), {
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries([QueryKeys.user]);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
export const useRefreshTokenMutation = (): UseMutationResult<
|
||||
t.TRefreshTokenResponse,
|
||||
unknown,
|
||||
|
|
@ -414,7 +388,12 @@ export const useRefreshTokenMutation = (): UseMutationResult<
|
|||
const queryClient = useQueryClient();
|
||||
return useMutation(() => request.refreshToken(), {
|
||||
onMutate: () => {
|
||||
queryClient.invalidateQueries([QueryKeys.models]);
|
||||
queryClient.removeQueries();
|
||||
localStorage.removeItem('lastConversationSetup');
|
||||
localStorage.removeItem('lastSelectedModel');
|
||||
localStorage.removeItem('lastSelectedTools');
|
||||
localStorage.removeItem('filesToDelete');
|
||||
localStorage.removeItem('lastAssistant');
|
||||
},
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -20,3 +20,9 @@ export type DeletePresetOptions = {
|
|||
onMutate?: (variables: TPreset | undefined) => void | Promise<unknown>;
|
||||
onError?: (error: unknown, variables: TPreset | undefined, context?: unknown) => void;
|
||||
};
|
||||
|
||||
export type LogoutOptions = {
|
||||
onSuccess?: (data: unknown, variables: undefined, context?: unknown) => void;
|
||||
onMutate?: (variables: undefined) => void | Promise<unknown>;
|
||||
onError?: (error: unknown, variables: undefined, context?: unknown) => void;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue