From bb38d843de17bb0b206a663e008c5dbb37f04708 Mon Sep 17 00:00:00 2001 From: Vidhu Kant Sharma Date: Sun, 4 Dec 2022 18:05:11 +0530 Subject: added (untested) auth mechanism --- src/index.js | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'src/index.js') diff --git a/src/index.js b/src/index.js index 593edf1..2a7a75d 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,65 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; +import axios from 'axios'; + +// For GET requests +axios.interceptors.request.use( + config => { + const token = localStorage.getItem("accessToken"); + if (token) config.headers.Authorization = token; + return config; + }, + err => new Promise((resolve) => { + if (err.response && err.response.status === 401) { + err.config._retry = true; + + const response = fetch("/auth/refresh", { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + .then((res) => res.json()) + .then((res) => { + localStorage.setItem("accessToken", res.accessToken); + return axios(err.config); + }) + resolve(response); + } else { + return Promise.reject(err); + } + }) +); + +// For POST requests +axios.interceptors.response.use( + config => { + const token = localStorage.getItem("accessToken"); + if (token) config.headers.Authorization = token; + return config; + }, + err => new Promise((resolve) => { + if (err.response && err.response.status === 401 && err.config.url !== "/auth/login") { + err.config._retry = true; + + const response = fetch("/auth/refresh", { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + .then((res) => res.json()) + .then((res) => { + localStorage.setItem("accessToken", res.accessToken); + return axios(err.config); + }) + resolve(response); + } else { + return Promise.reject(err); + } + }) +); const root = ReactDOM.createRoot(document.getElementById('root')); root.render( -- cgit v1.2.3