| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import api from "src/api";
- import { permissionStore } from "src/stores/permission";
- import { userStore } from "src/stores/user";
- import { useAuthStorage } from "src/composables/useAuthStorage";
- let refreshPromise = null;
- export const useAuth = () => {
- const { setRefreshToken, getRefreshToken, clearRefreshToken } = useAuthStorage();
- const clearAuthData = async () => {
- userStore().resetUser();
- permissionStore().resetScopes();
- await clearRefreshToken();
- };
- const setAuthDataFromPayload = async (tokens) => {
- const { access_token, refresh_token, user } = tokens;
- userStore().user = user;
- userStore().accessToken = access_token;
- await setRefreshToken(refresh_token);
- await permissionStore().fetchScopes();
- };
- const login = async (email, password) => {
- try {
- const response = await api.post("/login", {
- email: email,
- password: password,
- });
- if (response.status === 200) {
- await setAuthDataFromPayload(response.data.payload);
- }
- return response;
- } catch (error) {
- return Promise.reject(error);
- }
- };
- const logout = async () => {
- try {
- const response = await api.post("/logout");
- if (response.status === 200) {
- await clearAuthData();
- }
- } catch (error) {
- console.error(error);
- await clearAuthData();
- }
- };
- const doRefresh = async () => {
- try {
- const refreshToken = await getRefreshToken();
- if (!refreshToken) {
- return Promise.reject(new Error("No refresh token available"));
- }
- const response = await api.post("/refresh-app", {
- refresh_token: refreshToken,
- });
- if (response.status === 200) {
- await setAuthDataFromPayload(response.data.payload);
- }
- return response;
- } catch (error) {
- await clearAuthData();
- return Promise.reject(error);
- }
- };
- const refresh = () => {
- if (!refreshPromise) {
- refreshPromise = doRefresh().finally(() => {
- refreshPromise = null;
- });
- }
- return refreshPromise;
- };
- return {
- setAuthDataFromPayload,
- clearAuthData,
- login,
- logout,
- refresh,
- };
- };
|