noteJS-react/src/store/slices/authSlice.ts

43 lines
1.1 KiB
TypeScript

import { createSlice, PayloadAction } from "@reduxjs/toolkit";
interface AuthState {
isAuthenticated: boolean;
userId: number | null;
username: string | null;
loading: boolean;
}
const initialState: AuthState = {
isAuthenticated: localStorage.getItem("isAuthenticated") === "true",
userId: null,
username: localStorage.getItem("username") || null,
loading: false,
};
const authSlice = createSlice({
name: "auth",
initialState,
reducers: {
setAuth: (
state,
action: PayloadAction<{ userId: number; username: string }>
) => {
state.isAuthenticated = true;
state.userId = action.payload.userId;
state.username = action.payload.username;
localStorage.setItem("isAuthenticated", "true");
localStorage.setItem("username", action.payload.username);
},
clearAuth: (state) => {
state.isAuthenticated = false;
state.userId = null;
state.username = null;
localStorage.removeItem("isAuthenticated");
localStorage.removeItem("username");
},
},
});
export const { setAuth, clearAuth } = authSlice.actions;
export default authSlice.reducer;