59 lines
1.6 KiB
JavaScript
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;
|