From b394e191a8a36949789deac3a3104d8a055fc023 Mon Sep 17 00:00:00 2001 From: x032205 Date: Fri, 6 Jun 2025 13:02:23 -0400 Subject: [PATCH] Fix accepting invite while logged out --- backend/src/services/auth/auth-login-service.ts | 2 +- .../src/pages/auth/SignUpInvitePage/SignUpInvitePage.tsx | 7 ++++++- frontend/src/pages/middlewares/restrict-login-signup.tsx | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/src/services/auth/auth-login-service.ts b/backend/src/services/auth/auth-login-service.ts index bee85b14c..64ba573d5 100644 --- a/backend/src/services/auth/auth-login-service.ts +++ b/backend/src/services/auth/auth-login-service.ts @@ -397,7 +397,7 @@ export const authLoginServiceFactory = ({ // Check if the user actually has access to the specified organization. const userOrgs = await orgDAL.findAllOrgsByUserId(user.id); - const hasOrganizationMembership = userOrgs.some((org) => org.id === organizationId); + const hasOrganizationMembership = userOrgs.some((org) => org.id === organizationId && org.userStatus !== "invited"); const selectedOrg = await orgDAL.findById(organizationId); if (!hasOrganizationMembership) { diff --git a/frontend/src/pages/auth/SignUpInvitePage/SignUpInvitePage.tsx b/frontend/src/pages/auth/SignUpInvitePage/SignUpInvitePage.tsx index 89aa227c7..9cb739736 100644 --- a/frontend/src/pages/auth/SignUpInvitePage/SignUpInvitePage.tsx +++ b/frontend/src/pages/auth/SignUpInvitePage/SignUpInvitePage.tsx @@ -28,6 +28,7 @@ import { import { MfaMethod } from "@app/hooks/api/auth/types"; import { fetchOrganizations } from "@app/hooks/api/organization/queries"; import { ProjectType } from "@app/hooks/api/workspace/types"; +import { isLoggedIn } from "@app/hooks/api/reactQuery"; // eslint-disable-next-line new-cap const client = new jsrp.client(); @@ -69,6 +70,8 @@ export const SignupInvitePage = () => { const { mutateAsync: selectOrganization } = useSelectOrganization(); + const loggedIn = isLoggedIn(); + // Verifies if the information that the users entered (name, workspace) is there, and if the password matched the criteria. const signupErrorCheck = async () => { setIsLoading(true); @@ -240,8 +243,10 @@ export const SignupInvitePage = () => { if (response?.token) { SecurityClient.setSignupToken(response.token); setStep(2); - } else { + } else if (loggedIn) { navigate({ to: "/login/select-organization", search: { force: true } }); + } else { + navigate({ to: "/login" }); } } } catch (err) { diff --git a/frontend/src/pages/middlewares/restrict-login-signup.tsx b/frontend/src/pages/middlewares/restrict-login-signup.tsx index f22ba82fe..73964868a 100644 --- a/frontend/src/pages/middlewares/restrict-login-signup.tsx +++ b/frontend/src/pages/middlewares/restrict-login-signup.tsx @@ -75,8 +75,6 @@ export const Route = createFileRoute("/_restrict-login-signup")({ middlewares: [stripSearchParams({ callback_port: undefined, force: undefined })] }, beforeLoad: async ({ context, location, search }) => { - if (location.pathname === "/signupinvite") return; - if (!context.serverConfig.initialized) { if (location.pathname.endsWith("/admin/signup")) return; throw redirect({ to: "/admin/signup" }); @@ -94,6 +92,8 @@ export const Route = createFileRoute("/_restrict-login-signup")({ setAuthToken(data.token); + if (location.pathname === "/signupinvite") return; + // Avoid redirect if on select-organization page with force=true if (location.pathname.endsWith("select-organization") && search?.force === true) return;