Skip to content
Snippets Groups Projects
Select Git revision
  • 4588d6c3b99017845dfd794990f0fd09743200c8
  • develop default protected
  • issue/525-mandatory-thumb
  • issue/523-dashboard
  • issue/498/resources-duplicated
  • issue/482-screens-medals-trophies
  • issue/456-organizacoes-parceiras
  • issue/456-organização-parceira
  • issue/455-show-caracters-limit
9 results

loginHandler.js

Blame
  • 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);
    }