diff --git a/packages/console/src/consts/index.ts b/packages/console/src/consts/index.ts index 41471f726..51290fadb 100644 --- a/packages/console/src/consts/index.ts +++ b/packages/console/src/consts/index.ts @@ -5,3 +5,4 @@ export * from './logs'; export const themeStorageKey = 'logto:admin_console:theme'; export const requestTimeout = 20_000; +export const generatedPasswordStorageKey = 'logto:admin_console:generated_password'; diff --git a/packages/console/src/pages/UserDetails/index.tsx b/packages/console/src/pages/UserDetails/index.tsx index dfe24f06a..384d8cc93 100644 --- a/packages/console/src/pages/UserDetails/index.tsx +++ b/packages/console/src/pages/UserDetails/index.tsx @@ -4,7 +4,7 @@ import { useMemo, useState } from 'react'; import { toast } from 'react-hot-toast'; import { useTranslation } from 'react-i18next'; import ReactModal from 'react-modal'; -import { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'; +import { useLocation, useNavigate, useParams } from 'react-router-dom'; import useSWR from 'swr'; import Back from '@/assets/images/back.svg'; @@ -18,6 +18,7 @@ import DeleteConfirmModal from '@/components/DeleteConfirmModal'; import DetailsSkeleton from '@/components/DetailsSkeleton'; import LinkButton from '@/components/LinkButton'; import TabNav, { TabNavItem } from '@/components/TabNav'; +import { generatedPasswordStorageKey } from '@/consts'; import { generateAvatarPlaceHolderById } from '@/consts/avatars'; import useApi, { RequestError } from '@/hooks/use-api'; import * as detailsStyles from '@/scss/details.module.scss'; @@ -33,15 +34,13 @@ const UserDetails = () => { const location = useLocation(); const isLogs = location.pathname.endsWith('/logs'); const { userId } = useParams(); - const [searchParameters, setSearchParameters] = useSearchParams(); - const passwordEncoded = searchParameters.get('password'); - const password = passwordEncoded && atob(passwordEncoded); const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); const [isDeleteFormOpen, setIsDeleteFormOpen] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const [isDeleted, setIsDeleted] = useState(false); const [isResetPasswordFormOpen, setIsResetPasswordFormOpen] = useState(false); const [resetResult, setResetResult] = useState(); + const [password, setPassword] = useState(sessionStorage.getItem(generatedPasswordStorageKey)); const { data, error, mutate } = useSWR(userId && `/api/users/${userId}`); const isLoading = !data && !error; @@ -192,7 +191,8 @@ const UserDetails = () => { username={data.username ?? '-'} password={password} onClose={() => { - setSearchParameters({}); + setPassword(null); + sessionStorage.removeItem(generatedPasswordStorageKey); }} /> )} diff --git a/packages/console/src/pages/Users/components/CreateForm/index.tsx b/packages/console/src/pages/Users/components/CreateForm/index.tsx index c4d1d76ca..0dc4ae935 100644 --- a/packages/console/src/pages/Users/components/CreateForm/index.tsx +++ b/packages/console/src/pages/Users/components/CreateForm/index.tsx @@ -37,7 +37,7 @@ const CreateForm = ({ onClose }: Props) => { const password = nanoid(8); const createdUser = await api.post('/api/users', { json: { ...data, password } }).json(); - onClose?.(createdUser, btoa(password)); + onClose?.(createdUser, password); }); return ( diff --git a/packages/console/src/pages/Users/index.tsx b/packages/console/src/pages/Users/index.tsx index b9396ec9e..5183bc9b2 100644 --- a/packages/console/src/pages/Users/index.tsx +++ b/packages/console/src/pages/Users/index.tsx @@ -19,6 +19,7 @@ import Search from '@/components/Search'; import TableEmpty from '@/components/Table/TableEmpty'; import TableError from '@/components/Table/TableError'; import TableLoading from '@/components/Table/TableLoading'; +import { generatedPasswordStorageKey } from '@/consts'; import { generateAvatarPlaceHolderById } from '@/consts/avatars'; import { RequestError } from '@/hooks/use-api'; import * as modalStyles from '@/scss/modal.module.scss'; @@ -67,7 +68,8 @@ const Users = () => { setIsCreateFormOpen(false); if (createdUser && password) { - navigate(`/users/${createdUser.id}?password=${password}`); + sessionStorage.setItem(generatedPasswordStorageKey, password); + navigate(`/users/${createdUser.id}`); } }} />