aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/src/lib/api/auth.js
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/lib/api/auth.js')
-rw-r--r--frontend/src/lib/api/auth.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/frontend/src/lib/api/auth.js b/frontend/src/lib/api/auth.js
new file mode 100644
index 0000000..85ed28f
--- /dev/null
+++ b/frontend/src/lib/api/auth.js
@@ -0,0 +1,90 @@
+import api from './index';
+
+/**
+ * Register a new user
+ * @param {Object} userData - User registration data
+ * @returns {Promise} - Promise with registration response
+ */
+export const register = async (userData) => {
+ try {
+ const response = await api.post('/auth/register', userData);
+ return response.data;
+ } catch (error) {
+ throw error.response?.data || { message: 'Registration failed' };
+ }
+};
+
+/**
+ * Login a user
+ * @param {Object} credentials - User login credentials
+ * @returns {Promise} - Promise with login response
+ */
+export const login = async (credentials) => {
+ try {
+ const response = await api.post('/auth/login', credentials);
+
+ // Store token and user data
+ if (response.data.token) {
+ localStorage.setItem('token', response.data.token);
+ localStorage.setItem('user', JSON.stringify(response.data.user));
+ }
+
+ return response.data;
+ } catch (error) {
+ throw error.response?.data || { message: 'Login failed' };
+ }
+};
+
+/**
+ * Get current user profile
+ * @returns {Promise} - Promise with user profile data
+ */
+export const getProfile = async () => {
+ try {
+ const response = await api.get('/auth/profile');
+ return response.data;
+ } catch (error) {
+ throw error.response?.data || { message: 'Failed to get profile' };
+ }
+};
+
+/**
+ * Logout current user
+ */
+export const logout = () => {
+ localStorage.removeItem('token');
+ localStorage.removeItem('user');
+
+ // Force reload to clear any state
+ if (typeof window !== 'undefined') {
+ window.location.href = '/login';
+ }
+};
+
+/**
+ * Check if user is authenticated
+ * @returns {Boolean} - True if user is authenticated
+ */
+export const isAuthenticated = () => {
+ if (typeof window === 'undefined') return false;
+
+ const token = localStorage.getItem('token');
+ return !!token;
+};
+
+/**
+ * Get current user data
+ * @returns {Object|null} - User data or null if not authenticated
+ */
+export const getCurrentUser = () => {
+ if (typeof window === 'undefined') return null;
+
+ const userStr = localStorage.getItem('user');
+ if (!userStr) return null;
+
+ try {
+ return JSON.parse(userStr);
+ } catch (e) {
+ return null;
+ }
+}; \ No newline at end of file