2025-08-03 20:55:11 +07:00

59 lines
1.6 KiB
JavaScript

import { createSlice } from '@reduxjs/toolkit';
const initialState = {
isAuthenticated: false,
user: null,
token: localStorage.getItem('authToken') || null,
loading: false,
error: null
};
const authSlice = createSlice({
name: 'auth',
initialState,
reducers: {
loginStart: (state) => {
state.loading = true;
state.error = null;
},
loginSuccess: (state, action) => {
state.isAuthenticated = true;
state.user = action.payload.data.user;
state.token = action.payload.data.token;
state.loading = false;
state.error = null;
// Store token in localStorage
localStorage.setItem('authToken', action.payload.data.token);
localStorage.setItem('user', JSON.stringify(action.payload.data.user));
},
loginFailure: (state, action) => {
state.loading = false;
state.error = action.payload.error;
state.isAuthenticated = false;
state.user = null;
state.token = null;
},
logout: (state) => {
state.isAuthenticated = false;
state.user = null;
state.token = null;
state.loading = false;
state.error = null;
// Clear localStorage
localStorage.removeItem('authToken');
localStorage.removeItem('user');
},
checkAuth: (state) => {
const token = localStorage.getItem('authToken');
const user = localStorage.getItem('user');
if (token && user) {
state.isAuthenticated = true;
state.token = token;
state.user = JSON.parse(user);
}
}
}
});
export const { loginStart, loginSuccess, loginFailure, logout, checkAuth } = authSlice.actions;
export default authSlice.reducer;