feat: use cookies for authentication

This commit is contained in:
Elias Schneider
2023-01-04 11:54:28 +01:00
parent 71658ad39d
commit faea1abcc4
12 changed files with 193 additions and 74 deletions

View File

@@ -1,20 +1,7 @@
import axios, { AxiosError } from "axios";
import { getCookie } from "cookies-next";
import axios from "axios";
const api = axios.create({
baseURL: "/api",
});
api.interceptors.request.use(
(config) => {
const accessToken = getCookie("access_token");
if (accessToken) {
config!.headers!.Authorization = `Bearer ${accessToken}`;
}
return config;
},
(error: AxiosError) => {
return Promise.reject(error);
}
);
export default api;

View File

@@ -1,4 +1,4 @@
import { getCookie, setCookie } from "cookies-next";
import { getCookie } from "cookies-next";
import * as jose from "jose";
import api from "./api.service";
@@ -12,11 +12,6 @@ const signIn = async (emailOrUsername: string, password: string) => {
password,
});
setCookie("access_token", response.data.accessToken);
setCookie("refresh_token", response.data.refreshToken, {
maxAge: 60 * 60 * 24 * 30 * 3,
});
return response;
};
@@ -37,45 +32,30 @@ const signInTotp = async (
loginToken,
});
setCookie("access_token", response.data.accessToken);
setCookie("refresh_token", response.data.refreshToken, {
maxAge: 60 * 60 * 24 * 30 * 3,
});
return response;
};
const signUp = async (email: string, username: string, password: string) => {
const response = await api.post("auth/signUp", { email, username, password });
setCookie("access_token", response.data.accessToken);
setCookie("refresh_token", response.data.refreshToken, {
maxAge: 60 * 60 * 24 * 30 * 3,
});
return response;
};
const signOut = () => {
setCookie("access_token", null);
setCookie("refresh_token", null);
const signOut = async () => {
await api.post("/auth/signOut");
window.location.reload();
};
const refreshAccessToken = async () => {
try {
const accessToken = getCookie("access_token") as string;
const refreshToken = getCookie("refresh_token");
if (
(accessToken &&
(jose.decodeJwt(accessToken).exp ?? 0) * 1000 <
Date.now() + 2 * 60 * 1000) ||
(refreshToken && !accessToken)
!accessToken ||
(jose.decodeJwt(accessToken).exp ?? 0) * 1000 < Date.now() + 2 * 60 * 1000
) {
const response = await api.post("auth/token", { refreshToken });
setCookie("access_token", response.data.accessToken);
await api.post("/auth/token");
}
} catch {
} catch (e) {
console.info("Refresh token invalid or expired");
}
};