aboutsummaryrefslogtreecommitdiff
path: root/src/index.js
diff options
context:
space:
mode:
authorVidhu Kant Sharma <vidhukant@vidhukant.xyz>2022-12-04 18:05:11 +0530
committerVidhu Kant Sharma <vidhukant@vidhukant.xyz>2022-12-04 18:05:11 +0530
commitbb38d843de17bb0b206a663e008c5dbb37f04708 (patch)
tree3dd62fb8961d85a277fe5a882e8a41bc2c4d71dd /src/index.js
parent9ca1864b79ede841e71836132effc2e260b4e758 (diff)
added (untested) auth mechanism
Diffstat (limited to 'src/index.js')
-rw-r--r--src/index.js59
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(