React Native: предложения по обработке проверки электронной почты, если она условна - PullRequest
0 голосов
/ 07 ноября 2019

Я нахожусь на этом экране Register с функцией handleSubmit(), которая предположительно обрабатывает проверку электронной почты, которая гарантирует, что электронная почта является правильным форматом, но я ее не вижу.

_handleSubmit = () => {
    console.log("Register.js line 69: ", this.props.email);
    if (this.props.email) {
      Keyboard.dismiss();
      this.setState({ displaySpinner: true });
      this.props
        .submitVerificationEmail(this.props)
        .then(exists => {
          if (exists) {
            if (this.props.registeredUser.Credentials.IsPasswordSet) {
              this.setState({ displaySpinner: false });
              //eslint-disable-next-line
              this.props.navigation.navigate("RegisterEmailPassword");
            } else {
              this.props.handlePasswordReset(this.props.email).then(() => {
                this.setState({ displaySpinner: false });
                // this key means the user registration triggered the password recovery link
                LocalStorage.save("USER_RESET_PASSWORD_RESET_BY_SYSTEM", true);
                //eslint-disable-next-line
                this.props.navigation.navigate("ResetLinkConfirmationAlert", {
                  fromSystem: true
                });
              });
            }
          } else {
            this.setState({ displaySpinner: false });
            //eslint-disable-next-line
            this.props.navigation.navigate("RegisterNoEmail");
          }
        })
        .catch(error => {
          Alert.alert(
            "Error",
            error,
            [
              {
                text: "OK",
                onPress: () => this.setState({ displaySpinner: false })
              }
            ],
            { cancelable: false }
          );
        });
    } else {
      Alert.alert(
        "Invalid Email",
        "Please enter a valid email.",
        [
          {
            text: "OK",
            onPress: () => this.setState({ displaySpinner: false })
          }
        ],
        { cancelable: false }
      );
    }
  };

Мне просто кажется, что он обрабатывает любую электронную почту, предоставленную при регистрации в конечной точке. Я верю, что если бы я мог добавить какой-то тип === к if (this.props.email) {, это бы решило это, но я не смог добавить ничего, что не вернет undefined. Любые предложения или, возможно, лучшее решение?

Вы можете подумать, что submitVerificationEmail(this.props) обрабатывает проверку электронной почты, но я не вижу его в этом создателе действий:

export function submitVerificationEmail({ email }) {
  return async dispatch => {
    try {
      dispatch(resetVerifications());
      dispatch({ type: types.EMAIL_VERIFICATION_SUBMIT_STARTED });
      dispatch({ type: types.RESET_LOGIN_STATE });
      const url = `${endpoints.v2.INDIVIDUALS}?email=${email}`;
      console.log("registrationAction line 22: ", url);
      const userExists = await requester.sendGet(url);
      console.log("registrationAction line 24: ", userExists);
      if (userExists) {
        dispatch({
          type: types.EMAIL_VERIFICATION_SUBMIT_ENDED_SUCCESS,
          payload: userExists
        });
        dispatch(setEmailField(email));
        return Promise.resolve(true);
      }
      return Promise.resolve(false);
    } catch (error) {
      dispatch({
        type: types.EMAIL_VERIFICATION_SUBMIT_ENDED_ERROR,
        payload: error
      });

      if (error.Code === 6099) {
        return Promise.resolve(false);
      }
      return Promise.reject("Please enter a valid email address.");
    }
  };
}

1 Ответ

0 голосов
/ 11 ноября 2019

Мне показалось, что это работает на Android и iOS:

_handleSubmit = () => {
    console.log("Register.js line 69: ", this.props.email);
    const reg = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
    if (reg.test(this.props.email) === true) {
      Keyboard.dismiss();
      this.setState({ displaySpinner: true });
      this.props
        .submitVerificationEmail(this.props)
        .then(exists => {
          if (exists) {
            if (this.props.registeredUser.Credentials.IsPasswordSet) {
              this.setState({ displaySpinner: false });
              //eslint-disable-next-line
              this.props.navigation.navigate("RegisterEmailPassword");
            } else {
              this.props.handlePasswordReset(this.props.email).then(() => {
                this.setState({ displaySpinner: false });
                // this key means the user registration triggered the password recovery link
                LocalStorage.save("USER_RESET_PASSWORD_RESET_BY_SYSTEM", true);
                //eslint-disable-next-line
                this.props.navigation.navigate("ResetLinkConfirmationAlert", {
                  fromSystem: true
                });
              });
            }
          } else {
            this.setState({ displaySpinner: false });
            //eslint-disable-next-line
            this.props.navigation.navigate("RegisterNoEmail");
          }
        })
        .catch(error => {
          Alert.alert(
            "Error",
            error,
            [
              {
                text: "OK",
                onPress: () => this.setState({ displaySpinner: false })
              }
            ],
            { cancelable: false }
          );
        });
    } else {
      Alert.alert(
        "Invalid Email",
        "Please enter a valid email.",
        [
          {
            text: "OK",
            onPress: () => this.setState({ displaySpinner: false })
          }
        ],
        { cancelable: false }
      );
    }
  };
...