Пользовательский объект исчезает при обновлении браузера из хранилища - PullRequest
0 голосов
/ 29 января 2020

После входа я получаю пользовательский объект в подпорках, но после обновления браузера он исчезает. Я даже установил пользователя в хранилище приставок после входа в систему, а также при обновлении браузера.

Решение должно быть, когда пользователь вошел в систему, он должен быть установлен в хранилище приставок. Это то, что я делаю. Я не знаю, почему он исчезает.

редукторы / авторизация. js

const initialState = {
    isAuthInProgress: false,
    isAuthenticated: false,
    authError: null,
    user: null,
    isIdentifyingToken: false,
    token: localStorage.getItem("authToken") || ""
}


const auth = (state=initialState, action) => {
    switch(action.type) {
        case "AUTH_STARTS":
            return {...state,
                 isAuthInProgress: true,
                 authError: null
            }

        case "AUTH_SUCCESS":
            return {...state,
                isAuthInProgress: false,
                authError: null,
                isAuthenticated: true,
                user: action.data.user,
                isIdentifyingToken: false,
            }

        case "AUTH_ERROR":
            return {...state,
                isAuthInProgress: false,
                authError: action.data.error,
                isAuthenticated: false,
                user: null
            }

        case "TOKEN_VERIFICATION_STARTS":
            return {...state,
                isAuthInProgress: true,
                authError: null,
                isIdentifyingToken: true
            } 

        case "LOGOUT_USER":
            return {...state,
            isAuthenticated: false,
            token: localStorage.removeItem("authToken"),
            user: null
        }  

        default:
            return state
    }
}


export default auth

действия / userActions. js

export const loginUser = (loginData, redirect) => {
    return async dispatch => {
        dispatch({ type: "AUTH_STARTS" })

        try {
            const res = await axios.post("http://localhost:3000/api/v1/users/login", loginData)
            console.log(loginData)
            dispatch({
                type: "AUTH_SUCCESS",
                data: { user: res.data.user }
            })
            localStorage.setItem("authToken", res.data.token)
            redirect()
        } catch (err) {
            dispatch({
                type: "AUTH_ERROR",
                data: { error: "Something went wrong" }
            })
        }
    }
}



export const getCurrentUser = (token) => {
    console.log(token)
    return async dispatch => {
        dispatch({ type: "AUTH_STARTS" })
        try {
            const res = await axios.get("http://localhost:3000/api/v1/users/me", {
                headers: {
                    "Authorization": token
                }   
            })
            dispatch({
                type: "AUTH_SUCCESS",
                data: { user: res.data.user }
            })
        } catch (err) {
            dispatch({
                type: "AUTH_ERROR",
                data: { error: "Something went wrong" }
            })
        }
    }
}



export const logoutUser = () => {
    return dispatch => {
        dispatch({type: "LOGOUT_USER"})
    }
}

клиент / приложение. js

    componentDidMount() {
        const authToken = localStorage.getItem("authToken")

        if (authToken) {
            this.props.dispatch({ type: "TOKEN_VERIFICATION_STARTS" })
            this.props.dispatch(getCurrentUser(authToken))
        }
    }

маршруты / пользователи. js

router.get("/me", auth.verifyToken, usersController.identifyUser)

usersController / identifuUser

    identifyUser: (req, res, next) => {
        console.log("inside identify user")
        const userId = req.user.userId
        User.findOne({ _id: userId }, (err, user) => {
            if (err) return next(err)
            return res.json({ user })
        })
    }
...