38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
import { createSlice } from '@reduxjs/toolkit';
|
|
|
|
const initialState = {
|
|
token: localStorage.getItem('token') || null,
|
|
userInfo: localStorage.getItem('user') ? JSON.parse(localStorage.getItem('user')) : null,
|
|
isAuthenticated: localStorage.getItem('isAuthenticated') === 'true',
|
|
};
|
|
|
|
const userSlice = createSlice({
|
|
name: 'user',
|
|
initialState,
|
|
reducers: {
|
|
// 登录
|
|
login: (state, action) => {
|
|
state.token = action.payload.token;
|
|
state.userInfo = action.payload.userInfo;
|
|
state.isAuthenticated = true;
|
|
|
|
localStorage.setItem('token', action.payload.token);
|
|
localStorage.setItem('user', JSON.stringify(action.payload.userInfo));
|
|
localStorage.setItem('isAuthenticated', 'true');
|
|
},
|
|
// 退出
|
|
logout: (state) => {
|
|
state.token = null;
|
|
state.userInfo = null;
|
|
state.isAuthenticated = false;
|
|
|
|
localStorage.removeItem('token');
|
|
localStorage.removeItem('user');
|
|
localStorage.removeItem('isAuthenticated');
|
|
},
|
|
},
|
|
});
|
|
|
|
export const { login, logout } = userSlice.actions;
|
|
export default userSlice.reducer;
|