fix invitation link sign in logic

This commit is contained in:
Ishaan Jaff 2025-03-03 17:50:45 -08:00
parent 2c0f2e8fac
commit 30e5308cb3
3 changed files with 13 additions and 14 deletions

View file

@ -7588,6 +7588,8 @@ async def onboarding(invite_link: str):
- Pass in user_email if set - Pass in user_email if set
""" """
global prisma_client, master_key, general_settings global prisma_client, master_key, general_settings
from litellm.proxy.management_helpers.ui_session_handler import UISessionHandler
if master_key is None: if master_key is None:
raise ProxyException( raise ProxyException(
message="Master Key not set for Proxy. Please set Master Key to use Admin UI. Set `LITELLM_MASTER_KEY` in .env or set general_settings:master_key in config.yaml. https://docs.litellm.ai/docs/proxy/virtual_keys. If set, use `--detailed_debug` to debug issue.", message="Master Key not set for Proxy. Please set Master Key to use Admin UI. Set `LITELLM_MASTER_KEY` in .env or set general_settings:master_key in config.yaml. https://docs.litellm.ai/docs/proxy/virtual_keys. If set, use `--detailed_debug` to debug issue.",
@ -7688,11 +7690,9 @@ async def onboarding(invite_link: str):
) )
litellm_dashboard_ui += "?token={}&user_email={}".format(jwt_token, user_email) litellm_dashboard_ui += "?token={}&user_email={}".format(jwt_token, user_email)
return { return UISessionHandler.generate_authenticated_redirect_response(
"login_url": litellm_dashboard_ui, redirect_url=litellm_dashboard_ui, jwt_token=jwt_token
"token": jwt_token, )
"user_email": user_email,
}
@app.post("/onboarding/claim_token", include_in_schema=False) @app.post("/onboarding/claim_token", include_in_schema=False)

View file

@ -12,6 +12,7 @@ import {
Col, Col,
} from "@tremor/react"; } from "@tremor/react";
import { RiAlarmWarningLine, RiCheckboxCircleLine } from "@remixicon/react"; import { RiAlarmWarningLine, RiCheckboxCircleLine } from "@remixicon/react";
import { clearTokenCookies, getAuthToken } from "@/utils/cookieUtils";
import { import {
invitationClaimCall, invitationClaimCall,
userUpdateUserCall, userUpdateUserCall,
@ -20,7 +21,6 @@ import {
} from "@/components/networking"; } from "@/components/networking";
import { jwtDecode } from "jwt-decode"; import { jwtDecode } from "jwt-decode";
import { Form, Button as Button2, message } from "antd"; import { Form, Button as Button2, message } from "antd";
import { getAuthToken } from "@/utils/cookieUtils";
export default function Onboarding() { export default function Onboarding() {
const [form] = Form.useForm(); const [form] = Form.useForm();
@ -38,15 +38,18 @@ export default function Onboarding() {
if (!inviteID) { if (!inviteID) {
return; return;
} }
clearTokenCookies();
getOnboardingCredentials(inviteID).then((data) => { getOnboardingCredentials(inviteID).then((data) => {
const login_url = data.login_url; const login_url = data.login_url;
console.log("login_url:", login_url); console.log("login_url:", login_url);
setLoginUrl(login_url); setLoginUrl(login_url);
const token = data.token; const token = getAuthToken();
if (!token) {
return;
}
const decoded = jwtDecode(token) as { [key: string]: any }; const decoded = jwtDecode(token) as { [key: string]: any };
setJwtToken(token); setJwtToken(token);
console.log("decoded:", decoded); console.log("decoded:", decoded);
setAccessToken(decoded.key); setAccessToken(decoded.key);
@ -86,11 +89,7 @@ export default function Onboarding() {
let litellm_dashboard_ui = "/ui/"; let litellm_dashboard_ui = "/ui/";
const user_id = data.data?.user_id || data.user_id; const user_id = data.data?.user_id || data.user_id;
litellm_dashboard_ui += "?userID=" + user_id; litellm_dashboard_ui += "?userID=" + user_id;
// set cookie "token" to jwtToken
document.cookie = "token=" + jwtToken;
console.log("redirecting to:", litellm_dashboard_ui); console.log("redirecting to:", litellm_dashboard_ui);
window.location.href = litellm_dashboard_ui; window.location.href = litellm_dashboard_ui;
}); });

View file

@ -2,7 +2,7 @@
* Helper file for calls being made to proxy * Helper file for calls being made to proxy
*/ */
import { message } from "antd"; import { message } from "antd";
import { clearTokenCookies } from "@/utils/cookieUtils";
const isLocal = process.env.NODE_ENV === "development"; const isLocal = process.env.NODE_ENV === "development";
export const proxyBaseUrl = isLocal ? "http://localhost:4000" : null; export const proxyBaseUrl = isLocal ? "http://localhost:4000" : null;
if (isLocal != true) { if (isLocal != true) {
@ -50,7 +50,7 @@ const handleError = async (errorData: string) => {
message.info("UI Session Expired. Logging out."); message.info("UI Session Expired. Logging out.");
lastErrorTime = currentTime; lastErrorTime = currentTime;
await sleep(3000); // 5 second sleep await sleep(3000); // 5 second sleep
document.cookie = "token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; clearTokenCookies();
window.location.href = baseUrl; window.location.href = baseUrl;
} }
lastErrorTime = currentTime; lastErrorTime = currentTime;