first commit
This commit is contained in:
64
src/features/auth/authSlice.js
Normal file
64
src/features/auth/authSlice.js
Normal file
@@ -0,0 +1,64 @@
|
||||
import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
|
||||
// import axios from "axios";
|
||||
import api from "../../app/api";
|
||||
|
||||
export const login = createAsyncThunk(
|
||||
"auth/login",
|
||||
async (credentials, thunkAPI) => {
|
||||
try {
|
||||
const response = await api.post("/auth/login", credentials);
|
||||
|
||||
console.log("Login response:", response.data);
|
||||
|
||||
const token = response.data?.token || response.data?.data?.token;
|
||||
const user = response.data?.user || response.data?.data?.user;
|
||||
|
||||
if (!token) {
|
||||
throw new Error("No token returned from server");
|
||||
}
|
||||
|
||||
localStorage.setItem("token", token);
|
||||
return { user, token };
|
||||
} catch (error) {
|
||||
return thunkAPI.rejectWithValue(
|
||||
error.response?.data?.message || "Login failed"
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
const authSlice = createSlice({
|
||||
name: "auth",
|
||||
initialState: {
|
||||
user: null,
|
||||
loading: false,
|
||||
error: null,
|
||||
token: localStorage.getItem("token") || null,
|
||||
},
|
||||
reducers: {
|
||||
logout: (state) => {
|
||||
state.user = null;
|
||||
state.token = null;
|
||||
localStorage.removeItem("token");
|
||||
},
|
||||
},
|
||||
extraReducers: (builder) => {
|
||||
builder
|
||||
.addCase(login.pending, (state) => {
|
||||
state.loading = true;
|
||||
state.error = null;
|
||||
})
|
||||
.addCase(login.fulfilled, (state, action) => {
|
||||
state.loading = false;
|
||||
state.user = action.payload.user;
|
||||
state.token = action.payload.token;
|
||||
})
|
||||
.addCase(login.rejected, (state, action) => {
|
||||
state.loading = false;
|
||||
state.error = action.payload;
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
export const { logout } = authSlice.actions;
|
||||
export default authSlice.reducer;
|
||||
Reference in New Issue
Block a user