Update refresh conditional (#4375)

* update refresh conditional

* k
This commit is contained in:
pablonyx 2025-03-30 17:28:35 -07:00 committed by GitHub
parent 9951fe13ba
commit e8370dcb24
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 35 additions and 9 deletions

View File

@ -391,6 +391,11 @@ def get_application() -> FastAPI:
prefix="/auth",
)
if (
AUTH_TYPE == AuthType.CLOUD
or AUTH_TYPE == AuthType.BASIC
or AUTH_TYPE == AuthType.GOOGLE_OAUTH
):
# Add refresh token endpoint for OAuth as well
include_auth_router_with_prefix(
application,

View File

@ -20,7 +20,7 @@ import {
import { fetchAssistantData } from "@/lib/chat/fetchAssistantdata";
import { AppProvider } from "@/components/context/AppProvider";
import { PHProvider } from "./providers";
import { getCurrentUserSS } from "@/lib/userSS";
import { getAuthTypeMetadataSS, getCurrentUserSS } from "@/lib/userSS";
import { Suspense } from "react";
import PostHogPageView from "./PostHogPageView";
import Script from "next/script";
@ -70,11 +70,13 @@ export default async function RootLayout({
}: {
children: React.ReactNode;
}) {
const [combinedSettings, assistantsData, user] = await Promise.all([
fetchSettingsSS(),
fetchAssistantData(),
getCurrentUserSS(),
]);
const [combinedSettings, assistantsData, user, authTypeMetadata] =
await Promise.all([
fetchSettingsSS(),
fetchAssistantData(),
getCurrentUserSS(),
getAuthTypeMetadataSS(),
]);
const productGating =
combinedSettings?.settings.application_status ?? ApplicationStatus.ACTIVE;
@ -147,6 +149,7 @@ export default async function RootLayout({
return getPageContent(
<AppProvider
authTypeMetadata={authTypeMetadata}
user={user}
settings={combinedSettings}
assistants={assistants}

View File

@ -7,6 +7,7 @@ import { AssistantsProvider } from "./AssistantsContext";
import { Persona } from "@/app/admin/assistants/interfaces";
import { User } from "@/lib/types";
import { ModalProvider } from "./ModalContext";
import { AuthTypeMetadata } from "@/lib/userSS";
interface AppProviderProps {
children: React.ReactNode;
@ -15,6 +16,7 @@ interface AppProviderProps {
assistants: Persona[];
hasAnyConnectors: boolean;
hasImageCompatibleModel: boolean;
authTypeMetadata: AuthTypeMetadata;
}
export const AppProvider = ({
@ -24,10 +26,15 @@ export const AppProvider = ({
assistants,
hasAnyConnectors,
hasImageCompatibleModel,
authTypeMetadata,
}: AppProviderProps) => {
return (
<SettingsProvider settings={settings}>
<UserProvider settings={settings} user={user}>
<UserProvider
settings={settings}
user={user}
authTypeMetadata={authTypeMetadata}
>
<ProviderContextProvider>
<AssistantsProvider
initialAssistants={assistants}

View File

@ -13,6 +13,7 @@ import { usePostHog } from "posthog-js/react";
import { CombinedSettings } from "@/app/admin/settings/interfaces";
import { SettingsContext } from "../settings/SettingsProvider";
import { useTokenRefresh } from "@/hooks/useTokenRefresh";
import { AuthTypeMetadata } from "@/lib/userSS";
interface UserContextType {
user: User | null;
@ -33,10 +34,12 @@ interface UserContextType {
const UserContext = createContext<UserContextType | undefined>(undefined);
export function UserProvider({
authTypeMetadata,
children,
user,
settings,
}: {
authTypeMetadata: AuthTypeMetadata;
children: React.ReactNode;
user: User | null;
settings: CombinedSettings;
@ -102,7 +105,7 @@ export function UserProvider({
};
// Use the custom token refresh hook
useTokenRefresh(upToDateUser, fetchUser);
useTokenRefresh(upToDateUser, authTypeMetadata, fetchUser);
const updateUserTemperatureOverrideEnabled = async (enabled: boolean) => {
try {

View File

@ -1,6 +1,7 @@
import { useState, useEffect, useRef } from "react";
import { User } from "@/lib/types";
import { NO_AUTH_USER_ID } from "@/lib/extension/constants";
import { AuthTypeMetadata } from "@/lib/userSS";
// Refresh token every 10 minutes (600000ms)
// This is shorter than the session expiry time to ensure tokens stay valid
@ -9,6 +10,7 @@ const REFRESH_INTERVAL = 600000;
// Custom hook for handling JWT token refresh for current user
export function useTokenRefresh(
user: User | null,
authTypeMetadata: AuthTypeMetadata,
onRefreshFail: () => Promise<void>
) {
// Track last refresh time to avoid unnecessary calls
@ -18,7 +20,13 @@ export function useTokenRefresh(
const isFirstLoad = useRef(true);
useEffect(() => {
if (!user || user.id === NO_AUTH_USER_ID) return;
if (
!user ||
user.id === NO_AUTH_USER_ID ||
authTypeMetadata.authType === "oidc" ||
authTypeMetadata.authType === "saml"
)
return;
const refreshTokenPeriodically = async () => {
try {

View File