diff options
author | Vidhu Kant Sharma <vidhukant@vidhukant.xyz> | 2022-12-04 18:05:11 +0530 |
---|---|---|
committer | Vidhu Kant Sharma <vidhukant@vidhukant.xyz> | 2022-12-04 18:05:11 +0530 |
commit | bb38d843de17bb0b206a663e008c5dbb37f04708 (patch) | |
tree | 3dd62fb8961d85a277fe5a882e8a41bc2c4d71dd /src/index.js | |
parent | 9ca1864b79ede841e71836132effc2e260b4e758 (diff) |
added (untested) auth mechanism
Diffstat (limited to 'src/index.js')
-rw-r--r-- | src/index.js | 59 |
1 files changed, 59 insertions, 0 deletions
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( |