From 62e0c67c3efdf6aef5ca5fffbfda67e1a074b58b Mon Sep 17 00:00:00 2001 From: SandraBergstrom Date: Wed, 21 Jun 2023 15:52:59 +0000 Subject: [PATCH] #11 Set axiosReq to always refresh access token --- src/contexts/CurrentUserContext.js | 43 ++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/src/contexts/CurrentUserContext.js b/src/contexts/CurrentUserContext.js index 61f4b39..85b202e 100644 --- a/src/contexts/CurrentUserContext.js +++ b/src/contexts/CurrentUserContext.js @@ -1,18 +1,18 @@ import { createContext, useContext, useEffect, useMemo, useState } from "react"; import axios from "axios"; -import { axiosRes } from "../api/axiosDefaults"; +import { axiosReq, axiosRes } from "../api/axiosDefaults"; import { response } from "msw"; import { useHistory } from "react-router-dom/cjs/react-router-dom.min"; export const CurrentUserContext = createContext(); export const SetCurrentUserContext = createContext(); -export const useCurrentUser = () => useContext(CurrentUserContext) -export const useSetCurrentUser = () => useContext(SetCurrentUserContext) +export const useCurrentUser = () => useContext(CurrentUserContext); +export const useSetCurrentUser = () => useContext(SetCurrentUserContext); export const CurrentUserProvider = ({ children }) => { const [currentUser, setCurrentUser] = useState(null); - const history = useHistory() + const history = useHistory(); const handleMount = async () => { try { @@ -27,26 +27,41 @@ export const CurrentUserProvider = ({ children }) => { }, []); useMemo(() => { + axiosReq.interceptors.request.use(async (config) => { + try { + await axios.post("/dj-rest-auth/token/refresh/"); + } catch (err) { + setCurrentUser((prevCurrentUser) => { + if (prevCurrentUser) { + history.push("/signin"); + } + return null; + }); + return config; + } + return config; + }, [history]); + axiosRes.interceptors.response.use( (response) => response, async (err) => { - if (err.response?.status === 401){ + if (err.response?.status === 401) { try { - await axios.post('/dj-rest-auth/token/refresh/') + await axios.post("/dj-rest-auth/token/refresh/"); } catch (err) { - setCurrentUser(prevCurrentUser => { + setCurrentUser((prevCurrentUser) => { if (prevCurrentUser) { - history.push('/login') + history.push("/login"); } - return null - }) + return null; + }); } - return axios(err.config) + return axios(err.config); } - return Promise.reject(err) + return Promise.reject(err); } - ) - }) + ); + }); return (