diff options
Diffstat (limited to 'frontend/src/lib/api/auth.js')
-rw-r--r-- | frontend/src/lib/api/auth.js | 90 |
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 |