39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
import { auth } from "../firebase/firebase.utils";
|
|
|
|
//used to ensure that there is always a fresh token.
|
|
function minutesSince(date) {
|
|
const now = new Date();
|
|
const millisecondsSince = now - date;
|
|
// Divide milliseconds by 1000 to get seconds
|
|
// Divide seconds by 60 to get minutes
|
|
return millisecondsSince / 1000 / 60;
|
|
}
|
|
|
|
// Pass a different argument number to set a sooner/longer refresh time
|
|
export function shouldRefreshToken(minutesBeforeShouldRefresh = 45) {
|
|
const stringifiedRefreshTime = window.sessionStorage.getItem(
|
|
`lastTokenRefreshTime`
|
|
);
|
|
const lastRefreshAt = new Date(stringifiedRefreshTime);
|
|
const aboutToExpire =
|
|
minutesSince(lastRefreshAt) >= minutesBeforeShouldRefresh;
|
|
return aboutToExpire;
|
|
}
|
|
|
|
|
|
export async function refreshToken() {
|
|
try {
|
|
if (auth.user) {
|
|
const idToken = await auth().currentUser.getIdToken(
|
|
/* force refresh */ true
|
|
);
|
|
const now = new Date();
|
|
window.localStorage.setItem(`lastTokenRefreshTime`, now);
|
|
localStorage.setItem("token", idToken);
|
|
console.log("Token refreshed.");
|
|
}
|
|
} catch (err) {
|
|
console.error(err);
|
|
}
|
|
}
|