diff --git a/components/pages/Dashboard.js b/components/pages/Dashboard.js
index c979c130..113476c2 100644
--- a/components/pages/Dashboard.js
+++ b/components/pages/Dashboard.js
@@ -6,6 +6,7 @@ import PageHeader from 'components/layout/PageHeader';
import WebsiteChartList from 'components/pages/WebsiteChartList';
import DashboardSettingsButton from 'components/settings/DashboardSettingsButton';
import useApi from 'hooks/useApi';
+import useRequireLogin from 'hooks/useRequireLogin';
import useDashboard from 'store/dashboard';
import DashboardEdit from './DashboardEdit';
import styles from './WebsiteList.module.css';
@@ -16,6 +17,7 @@ const messages = defineMessages({
});
export default function Dashboard({ userId }) {
+ const { user } = useRequireLogin();
const dashboard = useDashboard();
const { showCharts, limit, editing } = dashboard;
const [max, setMax] = useState(limit);
@@ -27,7 +29,7 @@ export default function Dashboard({ userId }) {
setMax(max + limit);
}
- if (isLoading) {
+ if (!user || isLoading) {
return ;
}
diff --git a/components/pages/Settings.js b/components/pages/Settings.js
index 120411c3..f9e6401a 100644
--- a/components/pages/Settings.js
+++ b/components/pages/Settings.js
@@ -1,10 +1,10 @@
import Layout from 'components/layout/Layout';
import Menu from 'components/nav/Nav';
-import useUser from 'hooks/useUser';
+import useRequireLogin from 'hooks/useRequireLogin';
import styles from './Settings.module.css';
export default function Settings({ children }) {
- const user = useUser();
+ const { user } = useRequireLogin();
if (!user) {
return null;
diff --git a/hooks/useRequireLogin.js b/hooks/useRequireLogin.js
new file mode 100644
index 00000000..24cfdf0b
--- /dev/null
+++ b/hooks/useRequireLogin.js
@@ -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 };
+}
diff --git a/hooks/useUser.js b/hooks/useUser.js
index 108888ea..6b73c113 100644
--- a/hooks/useUser.js
+++ b/hooks/useUser.js
@@ -1,33 +1,9 @@
-import { useEffect } from 'react';
-import { useRouter } from 'next/router';
import useStore, { setUser } from 'store/app';
-import useApi from 'hooks/useApi';
const selector = state => state.user;
-let loading = false;
export default function useUser() {
const user = useStore(selector);
- const { get } = useApi();
- const router = useRouter();
- useEffect(() => {
- 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;
+ return { user, setUser };
}
diff --git a/pages/console/[[...id]].js b/pages/console/[[...id]].js
index 666e0597..7a94378f 100644
--- a/pages/console/[[...id]].js
+++ b/pages/console/[[...id]].js
@@ -1,9 +1,9 @@
import Layout from 'components/layout/Layout';
import TestConsole from 'components/pages/TestConsole';
-import useUser from 'hooks/useUser';
+import useRequireLogin from 'hooks/useRequireLogin';
export default function ConsolePage({ pageDisabled }) {
- const user = useUser();
+ const { user } = useRequireLogin();
if (pageDisabled || !user || !user.isAdmin) {
return null;
diff --git a/pages/dashboard/[[...id]].js b/pages/dashboard/[[...id]].js
index b6fc4492..5a185677 100644
--- a/pages/dashboard/[[...id]].js
+++ b/pages/dashboard/[[...id]].js
@@ -1,8 +1,8 @@
import { useRouter } from 'next/router';
import Layout from 'components/layout/Layout';
import Dashboard from 'components/pages/Dashboard';
-import useUser from 'hooks/useUser';
import useConfig from 'hooks/useConfig';
+import useRequireLogin from 'hooks/useRequireLogin';
export default function DashboardPage() {
const {
@@ -10,7 +10,7 @@ export default function DashboardPage() {
isReady,
asPath,
} = useRouter();
- const user = useUser();
+ const { user } = useRequireLogin();
const { adminDisabled } = useConfig();
if (adminDisabled || !user || !isReady) {
diff --git a/pages/realtime.js b/pages/realtime.js
index 472f2692..b8d7f664 100644
--- a/pages/realtime.js
+++ b/pages/realtime.js
@@ -1,9 +1,9 @@
import Layout from 'components/layout/Layout';
import RealtimeDashboard from 'components/pages/RealtimeDashboard';
-import useUser from 'hooks/useUser';
+import useRequireLogin from 'hooks/useRequireLogin';
export default function RealtimePage() {
- const user = useUser();
+ const { user } = useRequireLogin();
if (!user) {
return null;
diff --git a/pages/websites/[id]/index.js b/pages/websites/[id]/index.js
index 034295a0..f249cc97 100644
--- a/pages/websites/[id]/index.js
+++ b/pages/websites/[id]/index.js
@@ -1,10 +1,10 @@
import { useRouter } from 'next/router';
import Layout from 'components/layout/Layout';
import WebsiteDetails from 'components/pages/WebsiteDetails';
-import useUser from 'hooks/useUser';
+import useRequireLogin from 'hooks/useRequireLogin';
export default function DetailsPage() {
- const user = useUser();
+ const { user } = useRequireLogin();
const router = useRouter();
const { id } = router.query;
diff --git a/pages/websites/index.js b/pages/websites/index.js
index 56f9c67c..e09978a7 100644
--- a/pages/websites/index.js
+++ b/pages/websites/index.js
@@ -1,11 +1,10 @@
import Settings from 'components/pages/Settings';
import useConfig from 'hooks/useConfig';
-import useUser from 'hooks/useUser';
-
+import useRequireLogin from 'hooks/useRequireLogin';
import WebsitesList from 'components/pages/WebsitesList';
export default function WebsitesPage() {
- const user = useUser();
+ const { user } = useRequireLogin();
const { adminDisabled } = useConfig();
if (adminDisabled || !user) {
diff --git a/queries/admin/team.ts b/queries/admin/team.ts
index 1bebcadb..add282a9 100644
--- a/queries/admin/team.ts
+++ b/queries/admin/team.ts
@@ -26,7 +26,7 @@ export async function getTeamWebsites(teamId: string): Promise {
name: 'asc',
},
],
- });
+ } as any);
}
export async function createTeam(data: Prisma.TeamCreateInput): Promise {