Я использую реагирующий-редуктор, и редуктор автоматически возвращает исходное состояние при вызове действия, например (заданный код), когда я вызываю действие fetchPost или действие createPost, мой редуктор Auth автоматически возвращает исходное состояние.
почему это происходит, поэтому я использую Redux-Thunk и Backend с перьямиJS.
export const login = (payload) => dispatch => {
AsyncStorage.getItem('feathers-jwt').then(r => {
dispatch({ type: 'CHECK_AUTHORIZATION', payload: r })
}).catch(() => {
client.authenticate({
strategy: 'local',
email: payload.email,
password: payload.password
}).then(r => {;
dispatch({ type: 'LOGIN_REQUEST', payload: r })
}).catch(e => {
dispatch({ type: 'LOGIN_ERROR', payload: e.message })
})
})
}
export const checkAuthorization = () => dispatch => {
AsyncStorage.getItem('feathers-jwt').then(r => {
dispatch({ type: 'CHECK_AUTHORIZATION', payload: r });
return client.passport.verifyJWT(r);
}).then(payload => {
dispatch({ type: 'JWT_PAYLOAD', payload: payload })
return client.service('users').get(payload.userId);
}).then(user => {
client.set('user', user);
client.get('user').then(user => {
dispatch({ type: 'PROFILE', payload: user })
})
})
.catch(() => {
dispatch({ type: 'AUTHORIZATION_FAILED' })
})
}
export const logout = (payload) => dispatch => {
client.logout().then(r => dispatch({ type: 'LOG_OUT', payload: r }))
}
import actions from './actions';
import AsyncStorage from '@react-native-community/async-storage';
const initalState = {
users: [],
isAuthenticated: false,
accessToken: null,
profile: null,
isVendor: false,
isConsumer: false,
errorMessage: null,
jwtPayload: null
};
export default (state = initalState, action) => {
switch (action.type) {
case 'CHECK_AUTHORIZATION':
return Object.assign({}, state, {
accessToken: action.payload,
isAuthenticated: true
})
case 'AUTHORIZATION_FAILED':
return Object.assign({}, state, {
isAuthenticated: initalState.isAuthenticated
})
case 'LOGIN_REQUEST':
return (
Object.assign({}, state, {
accessToken: action.payload.accessToken,
isAuthenticated: true,
}));
case 'JWT_PAYLOAD':
return Object.assign({}, state, {
jwtPayload: action.payload
})
case 'PROFILE':
return Object.assign({}, state, {
profile: action.payload
})
case 'LOGIN_ERROR':
return Object.assign({}, state, {
errorMessage: action.payload.message
})
case 'LOG_OUT':
return Object.assign({}, state, {
isAuthenticated: initalState.isAuthenticated,
accessToken: null
})
default:
return initalState;
}
}