feat: logout

This commit is contained in:
Nevo David 2024-05-27 16:40:57 +07:00
parent 3d0cc13cc2
commit c6d1af73dd
3 changed files with 56 additions and 0 deletions

View File

@ -172,4 +172,39 @@ export class UsersController {
response.status(200).send();
}
@Post('/logout')
logout(@Res({ passthrough: true }) response: Response) {
response.cookie('auth', '', {
domain:
'.' + new URL(removeSubdomain(process.env.FRONTEND_URL!)).hostname,
secure: true,
httpOnly: true,
maxAge: -1,
expires: new Date(0),
sameSite: 'none',
});
response.cookie('showorg', '', {
domain:
'.' + new URL(removeSubdomain(process.env.FRONTEND_URL!)).hostname,
secure: true,
httpOnly: true,
maxAge: -1,
expires: new Date(0),
sameSite: 'none',
});
response.cookie('impersonate', '', {
domain:
'.' + new URL(removeSubdomain(process.env.FRONTEND_URL!)).hostname,
secure: true,
httpOnly: true,
maxAge: -1,
expires: new Date(0),
sameSite: 'none',
});
response.status(200).send();
}
}

View File

@ -0,0 +1,19 @@
import { isGeneral } from '@gitroom/react/helpers/is.general';
import { useCallback } from 'react';
import { deleteDialog } from '@gitroom/react/helpers/delete.dialog';
import { useFetch } from '@gitroom/helpers/utils/custom.fetch';
export const LogoutComponent = () => {
const fetch = useFetch();
const logout = useCallback(async () => {
if (await deleteDialog('Are you sure you want to logout?', 'Yes logout')) {
await fetch('/user/logout', {
method: 'POST',
});
window.location.href = '/';
}
}, []);
return <div className="text-red-400 cursor-pointer" onClick={logout}>Logout from {isGeneral() ? 'Postiz' : 'Gitroom'}</div>;
};

View File

@ -14,6 +14,7 @@ import clsx from 'clsx';
import { TeamsComponent } from '@gitroom/frontend/components/settings/teams.component';
import { isGeneral } from '@gitroom/react/helpers/is.general';
import { useUser } from '@gitroom/frontend/components/layout/user.context';
import { LogoutComponent } from '@gitroom/frontend/components/layout/logout.component';
export const SettingsPopup: FC<{ getRef?: Ref<any> }> = (props) => {
const { getRef } = props;
@ -187,6 +188,7 @@ export const SettingsPopup: FC<{ getRef?: Ref<any> }> = (props) => {
</div>
)}
{!!user?.tier?.team_members && isGeneral() && <TeamsComponent />}
<LogoutComponent />
</div>
</form>
</FormProvider>