Select Git revision
loginHandler.js
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);
}