我使用this guide通过来自jwt
rest框架的Django
令牌认证来使用我的api设置认证。我可以登录。但目前,我设置了另一个端点来获取当前授权用户的用户信息(由他们随请求发送的令牌确定)。
它的发送方式是这样的(用户登录后一段时间)
fetchUser: () => dispatch(loadUser()),
我的操作以加载用户名:
import { RSAA } from 'redux-api-middleware';
import withAuth from '../reducers'
export const USER_REQUEST = '@@user/USER_REQUEST';
export const USER_SUCCESS = '@@user/USER_SUCCESS';
export const USER_FAILURE = '@@user/USER_FAILURE';
export const loadUser = () => ({
[RSAA]: {
endpoint: '/api/user/info/',
method: 'GET',
headers: withAuth({}),
types: [
USER_REQUEST, USER_SUCCESS, USER_FAILURE
]
}
});
减速器:
import jwtDecode from 'jwt-decode'
import * as user from '../actions/user'
const initialState = {};
export default (state=initialState, action) => {
switch(action.type) {
case user.USER_SUCCESS:
return action.payload;
default:
return state
}
}
export const userInfo = (state) => state.user;
减速器index.js
:
export function withAuth(headers={}) {
return (state) => ({
...headers,
'Authorization': `Bearer ${accessToken(state)}`
})
}
export const userInfo = state => fromUser.userInfo(state.user);
但是当我尝试获取已登录用户的用户信息时,出现错误。
TypeError:无法读取未定义的属性“ type”
为什么未定义操作类型?
注意:我用thunk标记了它,因为我的项目确实使用thunk,但不是用于redux。
编辑:我的middleware.js
和我的store.js
。
答案 0 :(得分:0)
问题在于,在store.js
中,thunk
在redux-api-middleware
中间件之前被应用。
只需将其移动到以下位置即可:
const store = createStore(
reducer, {},
compose(
applyMiddleware(apiMiddleware, thunk, routerMiddleware(history)),
window.devToolsExtension ? window.devToolsExtension() : f => f,
),
);