Получить ответ. Взятый в действии Redux - PullRequest
0 голосов
/ 17 апреля 2019

Я работаю над React Native App, и мне нужно получить authToken, чтобы дать доступ к остальной части приложения после страницы входа в систему.

Я использую Redux и делаю Fetch в моем Loginpage, где в начале я использовал AsyncStorage, чтобы сохранить мой токен.Теперь я хочу сохранить свой токен в хранилище редукса.

Это мой выбор на LoginScreen.js

loginUser = async (user) => {
    const reg = /^[0-9]*$/;
    if ( reg.test(this.state.number) === true && (this.state.number.length === 10) && this.state.number !== '' && this.state.password !== '') { 
      fetch(`${API_SERVER}/auth/login`, {
          method: 'POST',
          headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
          },
          body: JSON.stringify({
            number: this.state.number,
            password: this.state.password,
          })
    })
        .then((response) => response.json())
        .then((response) => {
          if (response.message === 'No matching user.') {
            this.setState({
              visibleModal: true
            });
          } else if (response.success === true) {
            AsyncStorage.setItem('PhoneNumber', this.state.number); 
            this.props.saveUserToken(); 
            this.props.navigation.navigate('LoadingScreen');
            console.log(saveUserToken)
          }
        })
        .catch((error) => {
          Alert.alert(error);
        });

И это мое действие Redux.

export const saveUserToken = (data) => dispatch =>
  AsyncStorage.setItem('refreshToken', 
  JSON.stringify(response.refreshToken))
        .then((data) => {
            dispatch(loading(false));
            dispatch(saveToken('token saved'));
        })
        .catch((err) => {
            dispatch(loading(false));
            dispatch(error(err.message || 'ERROR'));
        })

1 Ответ

0 голосов
/ 17 апреля 2019
export const saveUserToken = (data) => {
    return (dispatch) => {
        AsyncStorage.setItem('refreshToken', JSON.stringify(response.refreshToken))
            .then((data) => {
                dispatch({
                    // add these lines //
                    type: 'STORE_TOKEN',
                    payload: data,
                });
            }
        )
    }
}



then describe a reducer 

case "STORE_TOKEN": {
            return { ...state, token: act`enter code here`ion.payload}
        }
...