create-nova-vite-template
Version:
This is a dashboard template built with React and Vite. It provides a modern and responsive user interface for building web applications.
49 lines (41 loc) • 1.46 kB
text/typescript
import { useEffect } from "react";
import {
// useDispatch,
useSelector,
} from "react-redux";
import { useLocation, useNavigate } from "react-router-dom";
import { RootState } from "@/reducers";
// import { setUserInfo } from "reducers/authReducer";
import loginHandler from "@/utils/loginHandler";
// import { useLazyGetUserInfoQuery } from "@/src/apis/services/auth";
export default function useAuth() {
const navigate = useNavigate();
const location = useLocation();
const token = useSelector((state: RootState) => state.auth.token);
// const [getUserInfo] = useLazyGetUserInfoQuery();
// const dispatch = useDispatch();
useEffect(() => {
const savedToken = localStorage.getItem("token") || "";
const savedRefreshToken = localStorage.getItem("refreshToken") || "";
loginHandler({
token: savedToken,
refreshToken: savedRefreshToken,
withoutResetCache: true,
});
// if (token) {
// getUserInfo()
// .unwrap()
// .then((res) => dispatch(setUserInfo(res)));
// }
}, []);
useEffect(() => {
if (typeof token !== "string") return;
if (!token) {
navigate("/login", { replace: true, state: { from: location } });
} else if (token && location.pathname === "/login") {
navigate("/", { replace: true });
} else if (location.state?.from) {
navigate(location.state.from);
}
}, [token]);
}