× Не обработанный отказ (TypeError): Невозможно прочитать свойства неопределенного (чтение 'access')

enter image description here Я использую react и redux для создания простой аутентификации пользователя. Когда я нажимаю на кнопку входа, пользователь проходит аутентификацию, однако пользователь отправляет нулевое сообщение. Ниже приведен код для действия auth и reducer

Auth Action
_____________
import axios from 'axios';
import { LOGIN_SUCCESS, LOGIN_FAIL, USER_LOADED_SUCCESS, USER_LOADED_FAIL,} from './types';


export const load_user = () => async dispatch =>{
    if(localStorage.getItem('access')){
        const config = {
            headers: {
                'Content-Type':'application/json',
                'Authorization': `JWT ${localStorage.getItem('access')}`,
                'Accept': 'application/json'
            }
        };
        try{
        const res = await axios.post(`${process.env.REACT_APP_API_URL}/account/login`, config)

        dispatch({
            type: USER_LOADED_SUCCESS,
            payload: res.data
        })
        
    }
        catch (err){
            dispatch({
                type: USER_LOADED_FAIL,
            })
        }
    }else {
        dispatch({
            type: USER_LOADED_FAIL,
        })
    }
    
};

export const login = (email, password) => async dispatch => {
    const config = {
        headers: {
            'Content-Type':'application/json'
        }
    };
    //const body = JSON.stringify({email, password});
    const body = {email, password};
    const data = JSON.stringify(body);
    
    try{
        console.log(data)
        const res = await axios.post(`${process.env.REACT_APP_API_URL}/account/login`, data, config)

        dispatch({
            type: LOGIN_SUCCESS,
            payload: res.data
        })
        dispatch(load_user());
    }   catch (err){
        dispatch({
            type: LOGIN_FAIL,
    
        })
    }
    
}

Auth Reducer

import { LOGIN_SUCCESS, LOGIN_FAIL, USER_LOADED_SUCCESS, USER_LOADED_FAIL,} from '../actions/types'

const initialState = {
    access: localStorage.getItem('access'),
    refresh: localStorage.getItem('refresh'),
    isAuthenticated: null,
    user: null
};

const authReducer = (state = initialState, action) => {
    const { type, payload } = action;
    switch (type) {
        case LOGIN_SUCCESS:
            localStorage.setItem('access', payload.access);
            return{
                ...state,
                isAuthenticated: true,
                access: payload.access,
                refresh: payload.refresh
            }
        case USER_LOADED_SUCCESS:
            localStorage.setItem('access', payload.access);
            return{
                ...state,
                user: payload
          
            }
          case USER_LOADED_FAIL:
            localStorage.setItem('access', payload.access);
            return{
                ...state,
                user: null
          
            }
        case LOGIN_FAIL:
            localStorage.removeItem('access');
            localStorage.removeItem('refresh');
            return {
                ...state,
                isAuthenticated: false,
                access: null,
                refresh: null,
                user: null
            }
        default:
            return state;
    }
}

export default authReducer

Когда я ввожу пользователя, я получаю следующий вывод из консоли сервера django (обратите внимание, что оба статуса 200 и 400 появляются на консоли после одного входа в систему)

[09/Nov/2021 10:05:28] "POST /account/login HTTP/1.1" 200 506
Bad Request: /user/login
[09/Nov/2021 10:05:28] "POST /account/login HTTP/1.1" 400 76

Login views.py

class LoginAPIView(generics.GenericAPIView):
    serializer_class = LoginSerializer

    def post(self, request):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

Мне трудно понять причину, по которой пользователь может быть АВТОРИТЕТИРОВАН, но оставаться NULL, как это показано в Redux DevTools, найденном на прикрепленном изображении

Вернуться на верх