useUser.js 936 B

1234567891011121314151617181920212223242526272829
  1. import { useEffect } from 'react'
  2. //import React, { useEffect } from 'react';
  3. import Router from 'next/router'
  4. import useSWR from 'swr'
  5. export default function useUser({
  6. redirectTo = false,
  7. redirectIfFound = false,
  8. } = {}) {
  9. const { data: user, mutate: mutateUser } = useSWR('/api/user')
  10. useEffect(() => {
  11. // if no redirect needed, just return (example: already on /dashboard)
  12. // if user data not yet there (fetch in progress, logged in or not) then don't do anything yet
  13. if (!redirectTo || !user) return
  14. if (
  15. // If redirectTo is set, redirect if the user was not found.
  16. (redirectTo && !redirectIfFound && !user?.isLoggedIn) ||
  17. // If redirectIfFound is also set, redirect if the user was found
  18. (redirectIfFound && user?.isLoggedIn)
  19. ) {
  20. Router.push(redirectTo)
  21. }
  22. }, [user, redirectIfFound, redirectTo])
  23. return { user, mutateUser }
  24. }