После входа я получаю пользовательский объект в подпорках, но после обновления браузера он исчезает. Я даже установил пользователя в хранилище приставок после входа в систему, а также при обновлении браузера.
Решение должно быть, когда пользователь вошел в систему, он должен быть установлен в хранилище приставок. Это то, что я делаю. Я не знаю, почему он исчезает.
редукторы / авторизация. 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 })
})
}