reactjs - 未处理的拒绝(TypeError):无法读取未定义的属性(读取“访问”)
问题描述
我正在使用 react 和 redux 来创建简单的用户身份验证。当我单击登录按钮时,用户已通过身份验证,但用户重新发送 null。通过调试,我意识到错误来自 auth 操作。从带有变量名的身份验证操作函数(在下面的代码中找到),load_user
我不明白要使用的正确 URL。我知道它应该接受获取请求,但我使用的登录 API 不能接受获取请求。通过使用 GET 请求,我得到了method not allowed
. 正是由此获得的数据load_user
在负载中分派,用于评估 redux reducer 中的 ACCESS 和 REFRESH 令牌。因为我没有发出正确的 axios 请求,所以反应无法读取返回的访问令牌的属性,因此我'
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.get(`${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,
})
}
}
授权减速器
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
登录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)
拜托,我的问题是,由于登录 API 不能接受获取请求,我怎么知道发送 axios 请求的近似 url?
解决方案
推荐阅读
- python - Sqlite3的DateTime函数中查询参数绑定
- testing - 没有“英国媒体报道”的测试
- php - 如何使用 CSS columns 属性在不同的列中以不同的方式对齐文本?
- spring-data-rest - Spring Data Rest - 从未使用过 @JsonDeserializer
- python-3.x - 根据熊猫中的特定条件,将 df 的一列替换为另一个 df 的另一列
- ansible - 选择并连接 dict 值列表
- angular - 角度形式永远不会重置
- c - 如何使用 getch() 使字符出现?
- android - 为什么我得到`Proto class is already defined in file`?
- algorithm - 哈希表重新散列和迭代器失效