mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-04-09 12:30:49 +02:00
functional sso callback
This commit is contained in:
parent
db54cb448b
commit
0a1c8ae980
@ -4,7 +4,6 @@ from fastapi import APIRouter
|
||||
from fastapi import Depends
|
||||
from fastapi import HTTPException
|
||||
from fastapi import Query
|
||||
from fastapi.responses import RedirectResponse
|
||||
from fastapi.security import OAuth2PasswordBearer
|
||||
from fastapi_users.authentication import Strategy
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
@ -14,7 +13,6 @@ from danswer.auth.users import create_user_session
|
||||
from danswer.auth.users import current_admin_user
|
||||
from danswer.auth.users import current_user
|
||||
from danswer.auth.users import get_database_strategy
|
||||
from danswer.auth.users import get_or_create_user
|
||||
from danswer.auth.users import get_user_manager
|
||||
from danswer.auth.users import is_user_admin
|
||||
from danswer.auth.users import UserManager
|
||||
@ -50,9 +48,7 @@ logger = setup_logger()
|
||||
|
||||
@basic_router.post("/auth/sso-callback")
|
||||
async def sso_callback(
|
||||
sso_token: str = Query(
|
||||
..., alias="sso_token"
|
||||
), # Get SSO token from query parameters
|
||||
sso_token: str = Query(..., alias="sso_token"),
|
||||
strategy: Strategy = Depends(get_database_strategy),
|
||||
user_manager: UserManager = Depends(get_user_manager),
|
||||
):
|
||||
@ -60,27 +56,93 @@ async def sso_callback(
|
||||
|
||||
payload = verify_sso_token(sso_token)
|
||||
|
||||
user = await get_or_create_user(
|
||||
user = await user_manager.sso_authenticate(
|
||||
payload["email"], payload["user_id"], payload["tenant_id"]
|
||||
)
|
||||
|
||||
session_token = await create_user_session(user, strategy)
|
||||
logger.info(f"Session token created: {session_token[:10]}...")
|
||||
logger.info(f"User email: {user.email}")
|
||||
logger.info(f"User ID: {user.id}")
|
||||
logger.info(f"User role: {user.role}")
|
||||
logger.info(f"Session expiry time: {SESSION_EXPIRE_TIME_SECONDS} seconds")
|
||||
print(f"Full session token (for debugging, remove in production): {session_token}")
|
||||
|
||||
response = RedirectResponse(url="/")
|
||||
response.set_cookie(
|
||||
key="session",
|
||||
value=session_token,
|
||||
httponly=True,
|
||||
max_age=SESSION_EXPIRE_TIME_SECONDS,
|
||||
secure=WEB_DOMAIN.startswith("https"),
|
||||
)
|
||||
return response
|
||||
return {
|
||||
"session_token": session_token,
|
||||
"max_age": SESSION_EXPIRE_TIME_SECONDS,
|
||||
"domain": WEB_DOMAIN.split("://")[-1],
|
||||
}
|
||||
|
||||
# response = Response(status_code=302)
|
||||
# response.set_cookie(
|
||||
# key="session",
|
||||
# value=session_token,
|
||||
# httponly=True,
|
||||
# max_age=SESSION_EXPIRE_TIME_SECONDS,
|
||||
# secure=WEB_DOMAIN.startswith("https"),
|
||||
# samesite="lax",Shou
|
||||
# domain=WEB_DOMAIN.split("://")[-1],
|
||||
# )
|
||||
# response.headers["Location"] = "/"
|
||||
# return response
|
||||
|
||||
|
||||
# @basic_router.post("/auth/sso-callback")
|
||||
# async def sso_callback(
|
||||
# sso_token: str = Query(
|
||||
# ..., alias="sso_token"
|
||||
# ), # Get SSO token from query parameters
|
||||
# strategy: Strategy = Depends(get_database_strategy),
|
||||
# user_manager: UserManager = Depends(get_user_manager),
|
||||
# ):
|
||||
# print("SSO callback reached")
|
||||
# print("SSO callback reached")
|
||||
|
||||
# payload = verify_sso_token(sso_token)
|
||||
|
||||
# user = await user_manager.sso_authenticate(
|
||||
# payload["email"], payload["user_id"], payload["tenant_id"]
|
||||
# )
|
||||
|
||||
# session_token = await create_user_session(user, strategy)
|
||||
# logger.info(f"Session token created: {session_token[:10]}...")
|
||||
# logger.info(f"User email: {user.email}")
|
||||
# logger.info(f"User ID: {user.id}")
|
||||
# logger.info(f"User role: {user.role}")
|
||||
# logger.info(f"Session expiry time: {SESSION_EXPIRE_TIME_SECONDS} seconds")
|
||||
|
||||
# response = RedirectResponse(url="/", status_code=302)
|
||||
# response.set_cookie(
|
||||
# key="session",
|
||||
# value=session_token,
|
||||
# httponly=True,
|
||||
# max_age=SESSION_EXPIRE_TIME_SECONDS,
|
||||
# secure=WEB_DOMAIN.startswith("https"),
|
||||
# samesite="lax",
|
||||
# domain=WEB_DOMAIN.split("://")[-1], # Remove protocol from domain
|
||||
# )
|
||||
# return response
|
||||
|
||||
# # payload = verify_sso_token(sso_token)
|
||||
|
||||
# # user = await get_or_create_user(
|
||||
# # payload["email"], payload["user_id"], payload["tenant_id"]
|
||||
# # )
|
||||
|
||||
# # session_token = await create_user_session(user, strategy)
|
||||
# # logger.info(f"Session token created: {session_token[:10]}...")
|
||||
# # logger.info(f"User email: {user.email}")
|
||||
# # logger.info(f"User ID: {user.id}")
|
||||
# # logger.info(f"User role: {user.role}")
|
||||
# # logger.info(f"Session expiry time: {SESSION_EXPIRE_TIME_SECONDS} seconds")
|
||||
|
||||
# # response = RedirectResponse(url="/", status_code=302)
|
||||
# # response.set_cookie(
|
||||
# # key="session",
|
||||
# # value=session_token,
|
||||
# # httponly=True,
|
||||
# # max_age=SESSION_EXPIRE_TIME_SECONDS,
|
||||
# # secure=WEB_DOMAIN.startswith("https"),
|
||||
# # samesite="lax",
|
||||
# # domain=WEB_DOMAIN.split("://")[-1], # Remove protocol from domain
|
||||
# # )
|
||||
# # return response
|
||||
|
||||
|
||||
@admin_router.put("")
|
||||
|
@ -27,19 +27,23 @@ export default function SSOCallback() {
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
credentials: "include",
|
||||
}
|
||||
);
|
||||
|
||||
if (response.ok) {
|
||||
const data = await response.json();
|
||||
console.log(data);
|
||||
setAuthStatus("Authentication successful!");
|
||||
setTimeout(() => {
|
||||
setAuthStatus("Redirecting to dashboard...");
|
||||
setTimeout(() => {
|
||||
router.replace("/admin/plan");
|
||||
}, 1000);
|
||||
}, 1000);
|
||||
|
||||
// Set the session cookie manually
|
||||
document.cookie = `fastapiusersauth=${data.session_token}; max-age=${data.max_age}; path=/; secure; samesite=lax`;
|
||||
|
||||
// Redirect to the dashboard
|
||||
router.replace("/admin/plan");
|
||||
} else {
|
||||
const errorData = await response.json();
|
||||
console.error("Authentication failed:", errorData);
|
||||
setError(errorData.detail || "Authentication failed");
|
||||
}
|
||||
} catch (error) {
|
||||
@ -50,6 +54,7 @@ export default function SSOCallback() {
|
||||
|
||||
verifyToken();
|
||||
}, [router, searchParams]);
|
||||
|
||||
return (
|
||||
<div className="flex items-center justify-center min-h-screen bg-gradient-to-r from-background-50 to-blue-50">
|
||||
<Card className="max-w-lg p-8 text-center shadow-xl rounded-xl bg-white">
|
||||
|
Loading…
x
Reference in New Issue
Block a user