Только пользователи Android получают эту ошибку при создании пользователя, используя пароль и пароль - PullRequest
1 голос
/ 23 июня 2019

На iOS это никогда не было проблемой, но многие из моих пользователей пытаются создать пользователя Firebase, затем я записываю информацию о недавно созданном пользователе в базу данных в реальном времени.Это ударил или пропустил, у некоторых пользователей это работает успешно, иногда это занимает больше чем одну попытку.Позвольте мне добавить, что я работаю над этим проектом только в течение короткого времени, и я уже могу сказать, что лучшие практики не используются.Ниже приведен код:

При использовании аварийных сбоев я вижу следующую ошибку: Fatal Exception: com.facebook.react.common.JavascriptException null не является объектом (оценивая t.navigator.dispatch),стек: @ 364: 2006 значение @ 49: 1280 @ 605: 1154 значение @ 49: 1280 @ 590: 497 значение @ 49: 1280 значение @ 28: 3311 @ 28: 822 значение @ 28: 2565 значение @ 28: 794 значение @-1

экранов / login.js

import React, { Component } from 'react';
import { ... } from 'react-native';
import { connect } from 'react-redux';
import { authActions, ... } from '../redux/actions';
import firebase from 'react-native-firebase';

class Login extends Component {
  static navigationOptions = () => ({
    headerMode: 'none',
    header: null,
  });

  constructor(props) {
    super(props);
    this.state = {
      email: '',
      password: '',
      forceCheckEmail: false,
      forceCheckPassword: false,
    };
  }

  componentWillReceiveProps(newProps) {
    const { props } = this;
    const {
      error,
      isBusy,
      dismissError,
      screenProps: {
        modal: {
          setContent,
          clearContent,
          setDismissHandler,
        },
      },
    } = newProps;

    if (props.error !== error || props.isBusy !== isBusy) {
      const modalContent =
        isBusy ? <Spinner text='One moment...' /> :
        error ? <ErrorPopup message={error} /> :
        null;

      if (modalContent) {
        setContent(modalContent, undefined, this.ref);
        setDismissHandler(() => {
          this.setState({ showForgotBlock: true })
          dismissError();
        });
      } else {
        clearContent();
      }
    }
  }

  handleLogin() {
    Keyboard.dismiss();

    this.props.login({
      email: this.state.email,
      password: this.state.password,
    });
  }

  render() {
    const {
      keyboardIsVisible,
      email,
      password,
      forceCheckEmail,
      forceCheckPassword,
      showForgotBlock,
    } = this.state;

    const {
...
      navigation: {
        navigate
      }
    } = this.props;

    const emailValid = validateEmail(email);
    const passwordValid = password.length > 5;
    const loginEnabled = email !== '' && emailValid && passwordValid;

    const forgotPasswordBlock = showForgotBlock ? (
      <TouchableOpacity
        onPress={() => restorePassword(email)}
        style={{marginTop: -20, marginBottom: 10}}
      >
        <Text style={{color: '#777'}}>
          Forgot your password?
        </Text>
      </TouchableOpacity>
    ): null;

    firebase.analytics().setCurrentScreen('login', 'login');

    return (

        ...

          <TextInput
            style={[styles.input, forceCheckEmail && !emailValid ? styles.failedInput : null]}
            autoCorrect={false}
            placeholder="Email"
            onBlur={() => this.setState({ forceCheckEmail: true })}
            autoCapitalize="none"
            keyboardType="email-address"
            placeholderTextColor={color.INPUT_TEXT}
            onChangeText={email => this.setState({ email })}
            value={email}
          />
          <TextInput
            style={[styles.input, forceCheckPassword && !passwordValid ? styles.failedInput : null]}
            autoCorrect={false}
            placeholder="Password"
            onBlur={() => this.setState({ forceCheckPassword: true })}
            placeholderTextColor={color.INPUT_TEXT}
            secureTextEntry
            onChangeText={password => this.setState({ password })}
            value={password}
          />

          ...

          <TouchableOpacity
            style={[styles.button, styles.buttonPrimary]}
            onPress={() => navigate('SignUp')}
          >
            <Text style={styles.buttonPrimaryText}>
              SIGN UP
            </Text>
          </TouchableOpacity>

...

export default connect(
  state => ({
    ...
  }),
  {
    login: data => authActions.login(data),

    ...
  },
)(Login);

actions / auth.js

import { createActions } from 'redux-feline-actions';// I question this dependency
import firebase from 'react-native-firebase';
import FBSDK from 'react-native-fbsdk';

const usersDB = firebase.database().ref('users');
const newUserData = {
  point: 0,
  savedNumbers: [],
};

export default createActions({
...
 register: ({ name, email, phone, password }) => ({
         useReducer: 'auth',
         payload: firebase.auth()
           .createUserWithEmailAndPassword(email, password)
           .then(({user: { uid, email }}) => usersDB
         .child(uid)
         .set({
           ...newUserData,
           name,
           email,
           phone,
           id: uid,
         })
         .then(err => err || ({
           ...newUserData,
           name,
           email,
           phone,
           id: uid,
         }))),
  }),
...

stores / auth.js

import Immutable, { Map } from 'immutable';
import createAsyncStores from 'cat-stores'; // I also question this one

export default createAsyncStores({
  auth: {
    begin: state => state
      .set('isBusy', true),
    complete: (state, { payload }) => state
      .set('isBusy', false)
      .set('user', Immutable.fromJS(payload)),
    error: {
      default: (state, { payload }) => state
        .set('error', payload.message)
        .set('isBusy', false)
        .set('user', null), // Android users keep getting this result I believe
    },
  },
...
},
Map({
  isBusy: false,
  error: null,
  user: null,
  redirectTo: null,
  theme: Map(),
  settings: Map(),
  themeIsLoaded: false,
  settingsAreLoaded: false,
}));

Я ожидаю, что у пользователя не будет проблем с созданием и сохранением новой пользовательской информации на Android, как на iOS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...