moving to docker
This commit is contained in:
10
react/app/src/utils/PrivateRoute.jsx
Normal file
10
react/app/src/utils/PrivateRoute.jsx
Normal file
@ -0,0 +1,10 @@
|
||||
import { Route, Redirect } from "react-router-dom";
|
||||
import { useContext } from "react";
|
||||
import AuthContext from "../context/AuthContext";
|
||||
|
||||
const PrivateRoute = ({ children, ...rest }) => {
|
||||
let { user } = useContext(AuthContext);
|
||||
return <Route {...rest}>{!user ? <Redirect to="/login" /> : children}</Route>;
|
||||
};
|
||||
|
||||
export default PrivateRoute;
|
||||
39
react/app/src/utils/useAxios.jsx
Normal file
39
react/app/src/utils/useAxios.jsx
Normal file
@ -0,0 +1,39 @@
|
||||
import axios from "axios";
|
||||
import jwt_decode from "jwt-decode";
|
||||
import dayjs from "dayjs";
|
||||
import { useContext } from "react";
|
||||
import AuthContext from "../context/AuthContext";
|
||||
|
||||
const baseURL = "http://127.0.0.1:8000/api/auth";
|
||||
|
||||
const useAxios = () => {
|
||||
const { authTokens, setUser, setAuthTokens } = useContext(AuthContext);
|
||||
|
||||
const axiosInstance = axios.create({
|
||||
baseURL,
|
||||
headers: { Authorization: `Bearer ${authTokens?.access}` }
|
||||
});
|
||||
|
||||
axiosInstance.interceptors.request.use(async req => {
|
||||
const user = jwt_decode(authTokens.access);
|
||||
const isExpired = dayjs.unix(user.exp).diff(dayjs()) < 1;
|
||||
|
||||
if (!isExpired) return req;
|
||||
|
||||
const response = await axios.post(`${baseURL}/token/`, {
|
||||
refresh: authTokens.refresh
|
||||
});
|
||||
|
||||
localStorage.setItem("authTokens", JSON.stringify(response.data));
|
||||
|
||||
setAuthTokens(response.data);
|
||||
setUser(jwt_decode(response.data.access));
|
||||
|
||||
req.headers.Authorization = `Bearer ${response.data.access}`;
|
||||
return req;
|
||||
});
|
||||
|
||||
return axiosInstance;
|
||||
};
|
||||
|
||||
export default useAxios;
|
||||
Reference in New Issue
Block a user