Skip to content
This repository was archived by the owner on Jul 2, 2022. It is now read-only.

Commit 9da1127

Browse files
committed
feat(client): add useRequireAuth hook
This can be used to redirect to either the pending or login page if a page requires auth
1 parent 8f2bd50 commit 9da1127

File tree

5 files changed

+21
-5
lines changed

5 files changed

+21
-5
lines changed

client/src/components/StudentCard.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Link from 'next/link';
22
import { useRouter } from 'next/router';
33
import { Badge, Pane, Pill } from 'evergreen-ui';
44
import { DragSource } from 'react-dnd';
5-
import { useSuggestions } from '../services';
5+
import { useSuggestions } from '@/hooks';
66

77
import styles from '../assets/styles/student-card.module.css';
88

client/src/hooks/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { default as useAuth } from './useAuth';
22
export { default as useStudents } from './useStudents';
33
export { default as useSuggestions } from './useSuggestions';
4+
export { default as useRequireAuth } from './useRequireAuth';

client/src/hooks/useAuth.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,6 @@ export default function useAuth() {
2929
if (data) setUser(data.me);
3030
}, [fetching, data]);
3131

32-
useEffect(() => {
33-
if (user && user.isPending) router.push('/pending');
34-
}, [user, isLoading]);
35-
3632
const logout = async () => {
3733
await auth.signOut();
3834
router.push('/login');

client/src/hooks/useRequireAuth.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { useEffect } from 'react';
2+
import { useRouter } from 'next/router';
3+
import useAuth from './useAuth';
4+
5+
export default function useRequireAuth(userShouldNotBePending = true, redirectUrl = '/login') {
6+
const { user } = useAuth();
7+
const router = useRouter();
8+
9+
useEffect(() => {
10+
if (!user) router.push(redirectUrl);
11+
if (userShouldNotBePending && user && user.isPending) router.push('/pending');
12+
}, [userShouldNotBePending, user, router]);
13+
14+
return user;
15+
}

client/src/pages/index.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
import { useRequireAuth } from '@/hooks';
12
import StudentDetail from '@/components/StudentDetail';
23
import SidebarLayout from '@/components/SidebarLayout';
34

45
function Index() {
6+
const user = useRequireAuth();
7+
8+
if (!user) return <p />;
59
return <StudentDetail />;
610
}
711

0 commit comments

Comments
 (0)