× Не обработанный отказ (TypeError): Невозможно прочитать свойства неопределенного (чтение 'access')
Я использую 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, найденном на прикрепленном изображении