Skip to content
Snippets Groups Projects
Select Git revision
  • 2f1c6727dfed892ff7d1454d9fa6e4844c6763ba
  • devel default
  • altamiro74
  • daniel66
  • bruna16
  • walmes10
  • alcides51
  • jhenifer61
  • bruna17
  • alessandra36
  • gabriel55
  • bruno41
  • angela25
  • angela26
  • bruno40
  • walmes9
  • eduardo28
  • jhenifer39
  • alessandra35
  • bruna15
  • bruna14
21 results

README.md

Blame
  • Forked from pet-estatistica / labestData
    Source project has a limited visibility.
    loginHandler.js 2.20 KiB
    import { usePathname, useSearchParams } from "next/navigation";
    import { useRouter } from "next/navigation";
    import { useCallback, useEffect, useState } from "react";
    import mecredApi from "@/axiosConfig";
    
    /**
     * React Hook for forcing login. Redirects to login page and when user logs in redirects back to the original page.
     * For example, doing `const loginBarrier = useLoginBarrier()` then calling `loginBarrier()` will redirect to login page if
     * the user is not logged in. 
     * 
     * @returns Function that will force login.
     */
    export function useLoginBarrier() {
      const pathname = usePathname();
      const searchParams = useSearchParams();
      const router = useRouter();
    
      return useCallback(() => {
        if (!localStorage.getItem('token')) return true;
    
        const params = new URLSearchParams();
        params.set("redirect", pathname);
        params.set("params", searchParams.toString());
        router.push(`/entrar?${params.toString()}`);
    
        return false;
      }, [router, pathname, searchParams]);
    }
    
    export function authHeaders() {
      const token = localStorage.getItem('token');
      return {
        'Authorization': `Bearer ${token}`
      };
    }
    
    export function useLoggedIn() {
      const [loggedIn, setLoggedIn] = useState(false);
    
      useEffect(() => {
        setLoggedIn(isLoggedIn());
      }, [setLoggedIn]);
    
      return loggedIn;
    }
    
    export function isLoggedIn() {
      return localStorage.getItem('token') ? true : false;
    }
    
    export function logIn(email, password) {
      return mecredApi
        .post("/public/auth/signin", {
          email: email,
          password: password,
        })
        .then((response) => {
          const token = response.data['token'];
          localStorage.setItem('token', token);
          fetchUser();
        });
    }
    
    export function logOut() {
      localStorage.removeItem('token');
      localStorage.removeItem('user_data');
    }
    
    export function userData() {
      const dataString = localStorage.getItem('user_data');
      if (!dataString)
        return undefined;
    
      const data = JSON.parse(dataString);
      console.log("USER DATA", data);
      return data;
    }
    
    export async function fetchUser() {
      const response = await mecredApi.get('/api/user/me',
        { headers: authHeaders() }
      );
      const dataString = JSON.stringify(response.data);
      localStorage.setItem('user_data', dataString);
    }