143 lines
4.4 KiB
JavaScript
143 lines
4.4 KiB
JavaScript
import { create } from "zustand";
|
|
import { createJSONStorage, persist } from "zustand/middleware";
|
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
import axios from "axios";
|
|
|
|
const API_URL = "https://hopp.zikor.pl/api/v1";
|
|
|
|
let interceptorInitialized = false;
|
|
|
|
export const useAuthStore = create(
|
|
persist(
|
|
(set, get) => {
|
|
// if (!interceptorInitialized.current) {
|
|
// axios.interceptors.response.use(
|
|
// (response) => response,
|
|
// (error) => {
|
|
// if (
|
|
// (error.response && error.response.status === 401) ||
|
|
// error.response.status === 403
|
|
// ) {
|
|
// set({ user_id: null, token: null, isLoading: false });
|
|
// delete axios.defaults.headers.common["Authorization"];
|
|
// }
|
|
// return Promise.reject(error);
|
|
// }
|
|
// );
|
|
// interceptorInitialized = true;
|
|
// }
|
|
return {
|
|
user_id: null,
|
|
token: null,
|
|
isLoading: false,
|
|
error: null,
|
|
|
|
signIn: async (email, password) => {
|
|
set({ isLoading: true, error: null });
|
|
try {
|
|
const response = await axios.post(`${API_URL}/auth/login`, {
|
|
email,
|
|
password,
|
|
});
|
|
|
|
const user_id = response.data.user_id;
|
|
const token = response.data.token;
|
|
set({ user_id: user_id, token: token, isLoading: false });
|
|
|
|
axios.defaults.headers.common["Authorization"] = `Bearer ${token}`;
|
|
} catch (error) {
|
|
set({
|
|
error: error.response?.data?.message || error.message,
|
|
isLoading: false,
|
|
});
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
signUp: async (userData) => {
|
|
set({ isLoading: true, error: null });
|
|
try {
|
|
const response = await axios.post(
|
|
`${API_URL}/auth/register`,
|
|
userData,
|
|
{
|
|
headers: { "Content-Type": "application/json" },
|
|
}
|
|
);
|
|
|
|
const user_id = response.data.user_id;
|
|
const token = response.data.token;
|
|
set({ user_id: user_id, token: token, isLoading: false });
|
|
|
|
axios.defaults.headers.common["Authorization"] = `Bearer ${token}`;
|
|
} catch (error) {
|
|
set({
|
|
error: error.response?.data?.message || error.message,
|
|
isLoading: false,
|
|
});
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
signInWithGoogle: async (googleToken) => {
|
|
set({ isLoading: true, error: null });
|
|
try {
|
|
const response = await axios.post(
|
|
`${API_URL}/auth/google`,
|
|
{ googleToken: googleToken },
|
|
{
|
|
headers: { "Content-Type": "application/json" },
|
|
}
|
|
);
|
|
const user_id = response.data.user_id;
|
|
const token = response.data.token;
|
|
set({ user_id: user_id, token: token, isLoading: false });
|
|
|
|
axios.defaults.headers.common["Authorization"] = `Bearer ${token}`;
|
|
} catch (error) {
|
|
set({
|
|
error: error.response?.data?.message || error.message,
|
|
isLoading: false,
|
|
});
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
signOut: async () => {
|
|
try {
|
|
await axios.post(`${API_URL}/auth/logout`);
|
|
} catch (error) {
|
|
console.error("Logout error:", error);
|
|
} finally {
|
|
delete axios.defaults.headers.common["Authorization"];
|
|
set({ user_id: null, token: null });
|
|
}
|
|
},
|
|
|
|
// checkAuth: async () => {
|
|
// const { token } = useAuthStore.getState();
|
|
// if (!token) return null;
|
|
|
|
// set({ isLoading: true });
|
|
// try {
|
|
// axios.defaults.headers.common["Authorization"] = `Bearer ${token}`;
|
|
|
|
// const response = await axios.get(`${API_URL}/auth/me`);
|
|
|
|
// set({ user_id: response.data, isLoading: false });
|
|
// return response.data;
|
|
// } catch (error) {
|
|
// delete axios.defaults.headers.common["Authorization"];
|
|
// set({ user_id: null, token: null, isLoading: false });
|
|
// return null;
|
|
// }
|
|
// },
|
|
};
|
|
},
|
|
{
|
|
name: "auth-storage",
|
|
storage: createJSONStorage(() => AsyncStorage),
|
|
}
|
|
)
|
|
);
|