diff --git a/airbyte-webapp/src/packages/cloud/lib/domain/users/UserService.ts b/airbyte-webapp/src/packages/cloud/lib/domain/users/UserService.ts index 9f1f4c9a2af3..32fd911ccf64 100644 --- a/airbyte-webapp/src/packages/cloud/lib/domain/users/UserService.ts +++ b/airbyte-webapp/src/packages/cloud/lib/domain/users/UserService.ts @@ -43,6 +43,10 @@ export class UserService extends AirbyteRequestService { return this.fetch(`v1/web_backend/users/create`, user); } + public async revokeUserSession(): Promise { + return this.fetch("v1/web_backend/users/revoke_user_session"); + } + public async remove(workspaceId: string, email: string): Promise { return this.fetch(`v1/web_backend/cloud_workspaces/revoke_user`, { email, diff --git a/airbyte-webapp/src/packages/cloud/services/auth/AuthService.tsx b/airbyte-webapp/src/packages/cloud/services/auth/AuthService.tsx index 10373d4d9c08..695fba9d3874 100644 --- a/airbyte-webapp/src/packages/cloud/services/auth/AuthService.tsx +++ b/airbyte-webapp/src/packages/cloud/services/auth/AuthService.tsx @@ -35,7 +35,7 @@ export type AuthChangeEmail = (email: string, password: string) => Promise export type AuthSendEmailVerification = () => Promise; export type AuthVerifyEmail = (code: string) => Promise; -export type AuthLogout = () => void; +export type AuthLogout = () => Promise; interface AuthContextApi { user: User | null; @@ -108,6 +108,7 @@ export const AuthenticationProvider: React.FC = ({ children }) => { } }, async logout(): Promise { + await userService.revokeUserSession(); await authService.signOut(); queryClient.removeQueries(); loggedOut(); diff --git a/airbyte-webapp/src/packages/cloud/views/users/AccountSettingsView/AccountSettingsView.tsx b/airbyte-webapp/src/packages/cloud/views/users/AccountSettingsView/AccountSettingsView.tsx index ef879bf8b29e..536cc88b420b 100644 --- a/airbyte-webapp/src/packages/cloud/views/users/AccountSettingsView/AccountSettingsView.tsx +++ b/airbyte-webapp/src/packages/cloud/views/users/AccountSettingsView/AccountSettingsView.tsx @@ -1,6 +1,7 @@ import { Field, FieldProps, Form, Formik } from "formik"; import React from "react"; import { FormattedMessage, useIntl } from "react-intl"; +import { useMutation } from "react-query"; import styled from "styled-components"; import { LabeledInput, LoadingButton } from "components"; @@ -18,7 +19,8 @@ const Header = styled.div` const AccountSettingsView: React.FC = () => { const { formatMessage } = useIntl(); - const { logout } = useAuthService(); + const authService = useAuthService(); + const { mutateAsync: logout, isLoading: isLoggingOut } = useMutation(() => authService.logout()); const user = useCurrentUser(); return ( @@ -63,7 +65,7 @@ const AccountSettingsView: React.FC = () => { title={
- logout()} data-testid="button.signout"> + logout()} isLoading={isLoggingOut} data-testid="button.signout">