2025-06-21 23:26:05 +08:00
|
|
|
import { createSlice } from "@reduxjs/toolkit";
|
|
|
|
|
import { login } from "./authThunk";
|
2025-09-06 23:48:33 +08:00
|
|
|
import { RootState } from "store";
|
|
|
|
|
|
|
|
|
|
interface AuthState {
|
|
|
|
|
userId: string | null;
|
|
|
|
|
name: string | null;
|
|
|
|
|
roles: string[];
|
|
|
|
|
token: string | null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const initialState: AuthState = {
|
|
|
|
|
userId: "",
|
|
|
|
|
name: "",
|
|
|
|
|
roles: [],
|
|
|
|
|
token: "",
|
|
|
|
|
};
|
2025-06-21 23:26:05 +08:00
|
|
|
|
|
|
|
|
const authSlice = createSlice({
|
|
|
|
|
name: "authSlice",
|
2025-09-06 23:48:33 +08:00
|
|
|
initialState: initialState,
|
2025-06-21 23:26:05 +08:00
|
|
|
reducers: {
|
|
|
|
|
logout(state) {
|
2025-09-06 23:48:33 +08:00
|
|
|
state.userId = "";
|
|
|
|
|
state.name = "";
|
|
|
|
|
state.token = "";
|
2025-06-21 23:26:05 +08:00
|
|
|
state.roles = [];
|
|
|
|
|
|
|
|
|
|
localStorage.removeItem("userId");
|
|
|
|
|
localStorage.removeItem("name");
|
|
|
|
|
localStorage.removeItem("roles");
|
|
|
|
|
localStorage.removeItem("token");
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
extraReducers: (builder) => {
|
|
|
|
|
builder.addCase(login.fulfilled, (state, action) => {
|
|
|
|
|
const payload = action.payload;
|
|
|
|
|
state.userId = payload.userId;
|
|
|
|
|
state.name = payload.name;
|
|
|
|
|
state.roles = payload.roles;
|
|
|
|
|
state.token = payload.token;
|
|
|
|
|
|
2025-09-05 20:46:56 +08:00
|
|
|
localStorage.setItem("userId", payload.userId.toString());
|
2025-06-21 23:26:05 +08:00
|
|
|
localStorage.setItem("name", payload.name);
|
|
|
|
|
localStorage.setItem("roles", JSON.stringify(payload.roles));
|
|
|
|
|
localStorage.setItem("token", action.payload.token);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const { logout } = authSlice.actions;
|
2025-09-06 23:48:33 +08:00
|
|
|
export const selectUserRole = (state: RootState) => state.auth.roles;
|
|
|
|
|
export const selectUserName = (state: RootState) => state.auth.name;
|
|
|
|
|
export const selectUserId = (state: RootState) => state.auth.userId;
|
2025-06-21 23:26:05 +08:00
|
|
|
export default authSlice.reducer;
|