Updated login check method.

This commit is contained in:
Mike Cao 2023-01-04 21:20:24 -08:00
parent 170b30b391
commit 796c65fa29
10 changed files with 45 additions and 40 deletions

View File

@ -6,6 +6,7 @@ import PageHeader from 'components/layout/PageHeader';
import WebsiteChartList from 'components/pages/WebsiteChartList'; import WebsiteChartList from 'components/pages/WebsiteChartList';
import DashboardSettingsButton from 'components/settings/DashboardSettingsButton'; import DashboardSettingsButton from 'components/settings/DashboardSettingsButton';
import useApi from 'hooks/useApi'; import useApi from 'hooks/useApi';
import useRequireLogin from 'hooks/useRequireLogin';
import useDashboard from 'store/dashboard'; import useDashboard from 'store/dashboard';
import DashboardEdit from './DashboardEdit'; import DashboardEdit from './DashboardEdit';
import styles from './WebsiteList.module.css'; import styles from './WebsiteList.module.css';
@ -16,6 +17,7 @@ const messages = defineMessages({
}); });
export default function Dashboard({ userId }) { export default function Dashboard({ userId }) {
const { user } = useRequireLogin();
const dashboard = useDashboard(); const dashboard = useDashboard();
const { showCharts, limit, editing } = dashboard; const { showCharts, limit, editing } = dashboard;
const [max, setMax] = useState(limit); const [max, setMax] = useState(limit);
@ -27,7 +29,7 @@ export default function Dashboard({ userId }) {
setMax(max + limit); setMax(max + limit);
} }
if (isLoading) { if (!user || isLoading) {
return <Loading />; return <Loading />;
} }

View File

@ -1,10 +1,10 @@
import Layout from 'components/layout/Layout'; import Layout from 'components/layout/Layout';
import Menu from 'components/nav/Nav'; import Menu from 'components/nav/Nav';
import useUser from 'hooks/useUser'; import useRequireLogin from 'hooks/useRequireLogin';
import styles from './Settings.module.css'; import styles from './Settings.module.css';
export default function Settings({ children }) { export default function Settings({ children }) {
const user = useUser(); const { user } = useRequireLogin();
if (!user) { if (!user) {
return null; return null;

28
hooks/useRequireLogin.js Normal file
View File

@ -0,0 +1,28 @@
import { useEffect } from 'react';
import { useRouter } from 'next/router';
import useApi from 'hooks/useApi';
import useUser from 'hooks/useUser';
export default function useRequireLogin() {
const router = useRouter();
const { get } = useApi();
const { user, setUser } = useUser();
useEffect(() => {
async function loadUser() {
try {
const { user } = await get('/auth/verify');
setUser(user);
} catch {
await router.push('/login');
}
}
if (!user) {
loadUser();
}
}, [user]);
return { user };
}

View File

@ -1,33 +1,9 @@
import { useEffect } from 'react';
import { useRouter } from 'next/router';
import useStore, { setUser } from 'store/app'; import useStore, { setUser } from 'store/app';
import useApi from 'hooks/useApi';
const selector = state => state.user; const selector = state => state.user;
let loading = false;
export default function useUser() { export default function useUser() {
const user = useStore(selector); const user = useStore(selector);
const { get } = useApi();
const router = useRouter();
useEffect(() => { return { user, setUser };
async function loadUser() {
const { user } = await get('/auth/verify');
loading = false;
if (!user) {
await router.push('/login');
} else {
setUser(user);
}
}
if (!user && !loading) {
loading = true;
loadUser();
}
}, [user, get, router]);
return user;
} }

View File

@ -1,9 +1,9 @@
import Layout from 'components/layout/Layout'; import Layout from 'components/layout/Layout';
import TestConsole from 'components/pages/TestConsole'; import TestConsole from 'components/pages/TestConsole';
import useUser from 'hooks/useUser'; import useRequireLogin from 'hooks/useRequireLogin';
export default function ConsolePage({ pageDisabled }) { export default function ConsolePage({ pageDisabled }) {
const user = useUser(); const { user } = useRequireLogin();
if (pageDisabled || !user || !user.isAdmin) { if (pageDisabled || !user || !user.isAdmin) {
return null; return null;

View File

@ -1,8 +1,8 @@
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import Layout from 'components/layout/Layout'; import Layout from 'components/layout/Layout';
import Dashboard from 'components/pages/Dashboard'; import Dashboard from 'components/pages/Dashboard';
import useUser from 'hooks/useUser';
import useConfig from 'hooks/useConfig'; import useConfig from 'hooks/useConfig';
import useRequireLogin from 'hooks/useRequireLogin';
export default function DashboardPage() { export default function DashboardPage() {
const { const {
@ -10,7 +10,7 @@ export default function DashboardPage() {
isReady, isReady,
asPath, asPath,
} = useRouter(); } = useRouter();
const user = useUser(); const { user } = useRequireLogin();
const { adminDisabled } = useConfig(); const { adminDisabled } = useConfig();
if (adminDisabled || !user || !isReady) { if (adminDisabled || !user || !isReady) {

View File

@ -1,9 +1,9 @@
import Layout from 'components/layout/Layout'; import Layout from 'components/layout/Layout';
import RealtimeDashboard from 'components/pages/RealtimeDashboard'; import RealtimeDashboard from 'components/pages/RealtimeDashboard';
import useUser from 'hooks/useUser'; import useRequireLogin from 'hooks/useRequireLogin';
export default function RealtimePage() { export default function RealtimePage() {
const user = useUser(); const { user } = useRequireLogin();
if (!user) { if (!user) {
return null; return null;

View File

@ -1,10 +1,10 @@
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import Layout from 'components/layout/Layout'; import Layout from 'components/layout/Layout';
import WebsiteDetails from 'components/pages/WebsiteDetails'; import WebsiteDetails from 'components/pages/WebsiteDetails';
import useUser from 'hooks/useUser'; import useRequireLogin from 'hooks/useRequireLogin';
export default function DetailsPage() { export default function DetailsPage() {
const user = useUser(); const { user } = useRequireLogin();
const router = useRouter(); const router = useRouter();
const { id } = router.query; const { id } = router.query;

View File

@ -1,11 +1,10 @@
import Settings from 'components/pages/Settings'; import Settings from 'components/pages/Settings';
import useConfig from 'hooks/useConfig'; import useConfig from 'hooks/useConfig';
import useUser from 'hooks/useUser'; import useRequireLogin from 'hooks/useRequireLogin';
import WebsitesList from 'components/pages/WebsitesList'; import WebsitesList from 'components/pages/WebsitesList';
export default function WebsitesPage() { export default function WebsitesPage() {
const user = useUser(); const { user } = useRequireLogin();
const { adminDisabled } = useConfig(); const { adminDisabled } = useConfig();
if (adminDisabled || !user) { if (adminDisabled || !user) {

View File

@ -26,7 +26,7 @@ export async function getTeamWebsites(teamId: string): Promise<Website[]> {
name: 'asc', name: 'asc',
}, },
], ],
}); } as any);
} }
export async function createTeam(data: Prisma.TeamCreateInput): Promise<Team> { export async function createTeam(data: Prisma.TeamCreateInput): Promise<Team> {