Force refresh token at the end of subscription

This commit is contained in:
Maxime Lalo 2024-04-24 10:41:18 +02:00
parent 5c63e04ba0
commit 2851c5834d
3 changed files with 61 additions and 5 deletions

View File

@ -135,9 +135,8 @@ export default abstract class BaseApiService {
private async checkJwtToken() {
const accessToken = CookieService.getInstance().getCookie("leCoffreAccessToken");
if (!accessToken) {
return;
}
if (!accessToken) return;
const userDecodedToken = jwt_decode(accessToken) as IUserJwtPayload;
const customerDecodedToken = jwt_decode(accessToken) as ICustomerJwtPayload;

View File

@ -13,6 +13,7 @@ import Subscriptions from "@Front/Api/LeCoffreApi/Admin/Subscriptions/Subscripti
import JwtService from "@Front/Services/JwtService/JwtService";
import { Subscription } from "le-coffre-resources/dist/Admin";
import Stripe from "@Front/Api/LeCoffreApi/Admin/Stripe/Stripe";
import CookieService from "@Front/Services/CookieService/CookieService";
export default function SubscriptionSuccess() {
const [subscription, setSubscription] = useState<Subscription | null>(null);
@ -27,6 +28,14 @@ export default function SubscriptionSuccess() {
setCustomer(customer);
}, []);
const refreshToken = useCallback(async () => {
CookieService.getInstance().deleteCookie("leCoffreAccessToken");
const refreshToken = CookieService.getInstance().getCookie("leCoffreRefreshToken");
if (!refreshToken) return;
await JwtService.getInstance().forceRefreshToken(refreshToken);
await loadSubscription();
}, [loadSubscription]);
const getFrequency = useCallback(() => {
if (!subscription) return;
const start = new Date(subscription.start_date);
@ -38,8 +47,8 @@ export default function SubscriptionSuccess() {
}, [subscription]);
useEffect(() => {
loadSubscription();
}, [loadSubscription]);
refreshToken();
}, [refreshToken]);
return (
<DefaultTemplate title="Abonnement réussi">

View File

@ -112,6 +112,54 @@ export default class JwtService {
return false;
}
public async forceRefreshToken(refreshToken: string): Promise<boolean> {
const userToken = jwt_decode(refreshToken) as IUserJwtPayload;
const customerToken = jwt_decode(refreshToken) as ICustomerJwtPayload;
const variables = FrontendVariables.getInstance();
if (userToken?.userId) {
try {
const headers = new Headers();
headers.append("Authorization", `Bearer ${refreshToken}`);
const response = await fetch(
`${
variables.BACK_API_PROTOCOL + variables.BACK_API_HOST + variables.BACK_API_ROOT_URL + variables.BACK_API_VERSION
}/idnot/user/auth/refresh-token`,
{ method: "POST", headers: headers },
);
const newAccessToken: { accessToken: string } = await response.json();
if (newAccessToken) {
await UserStore.instance.connect(newAccessToken.accessToken, refreshToken);
return true;
}
} catch (err) {
console.error(err);
return false;
}
} else if (customerToken?.customerId) {
try {
const headers = new Headers();
headers.append("Authorization", `Bearer ${refreshToken}`);
const response = await fetch(
`${
variables.BACK_API_PROTOCOL + variables.BACK_API_HOST + variables.BACK_API_ROOT_URL + variables.BACK_API_VERSION
}/id360/customers/refresh-token`,
{ method: "POST", headers: headers },
);
const newAccessToken: { accessToken: string } = await response.json();
if (newAccessToken) {
await CustomerStore.instance.connect(newAccessToken.accessToken, refreshToken);
return true;
}
} catch (err) {
console.error(err);
return false;
}
}
return false;
}
public hasRule(name: string, action: string) {
const token = this.decodeJwt();
if (!token) return false;