Как успешно зарегистрировать пользователей в Redux с помощью Firebase Auth - PullRequest
0 голосов
/ 02 января 2019

Я получаю сообщение об ошибке undefined при регистрации пользователя.

Я не уверен, правильно ли реагирует получение информации о состоянии.Возможно, это может быть значением onChange, или, может быть, я что-то упускаю.

Я ссылался на это

Как реализовать аутентификацию Firebase с React Redux?

но все еще не уверены, в чем может быть ошибка.

enter image description here

Это показывает, что пользователь был зарегистрирован на бэкэнде следующим образом.

enter image description here

Демо

https://stackblitz.com/edit/react-h9ekc4

Действия

export const onEmailSignUpChangeAction = value => ({
    type: EMAIL_SIGN_UP_CHANGE,
    email: value
})

export const onPasswordSignUpChangeAction = value => ({
    type: PASSWORD_SIGN_UP_CHANGE,
    password: value
})



export const onEmptySignUpEmailClick = () => ({
    type: 'EMPTY_SIGN_UP_EMAIL'
})

export const onEmptySignUpPasswordClick = () => ({
    type: 'EMPTY_SIGN_UP_PASSWORD'
})

export const signUp = () => (dispatch, getState) => {
    const {signUpAuth} = getState();
    if (signUpAuth.emailSignUp === '') {
        dispatch(onEmptySignUpEmailClick())
    }
    if (signUpAuth.passwordSignUp === '') { 
        dispatch(onEmptySignUpPasswordClick())
     }
    else {
        firebaseAuth.createUserWithEmailAndPassword(signUpAuth.emailSignUp, signUpAuth.passwordSignUp)
            .then(() => console.log('signUpok'))
                .catch( function (error) {
                        let errorCode = error.code;
                        let errorMessage = error.message;
                        alert(errorMessage)
                });



    }

}

Регистрация.js

import React, { Component } from 'react';
import { withRouter } from "react-router-dom";
import { connect } from "react-redux";
import { signUp, onEmailSignUpChangeAction, onPasswordSignUpChangeAction } from '../actions/';
class SignUp extends Component {
  state = {
    email: "",
    password: ""
  }

  // onChange = (e) =>{
  //   this.setState({
  //       [e.target.name] : e.target.value
  //   })
  // }
  handleSubmit = (e) => {
    e.preventDefault();
    const register = this.props.signUp();
    console.log(register);
    (register === true) && this.props.history.push('/');
    console.log(this.state)


  }
  render() {
    return (
      <div className="container">
        <div className="row">
          <div className="col-md-6">
            <h1>Sign Up</h1>
            <form onSubmit={this.handleSubmit}>
              <div className="form-group">
                <label htmlFor="exampleInputEmail1">Email address</label>
                <input
                  type="email"
                  className="form-control"
                  id="email"
                  onChange={this.props.onEmailSignUpChangeAction}
                  aria-describedby="emailHelp"
                  value={this.props.emailSignUp}
                  placeholder="Enter email" />
                <small id="emailHelp" className="form-text text-muted">We'll never share your email with anyone else.</small>
              </div>
              <div className="form-group">
                <label htmlFor="exampleInputPassword1">Password</label>
                <input
                  type="password"
                  className="form-control"
                  id="password"
                  value={this.props.passwordSignUp}
                  onChange={this.props.onPasswordSignUpChangeAction}
                  placeholder="Password" />
              </div>

              <button type="submit" className="btn btn-primary">Submit</button>
            </form>
          </div>

        </div>
      </div>

    );
  }

}

const mapStateToProps = (state) => ({
  user: state.auth.user,
  emailSignUp: state.signUpAuth.emailSignUp,
  passwordSignUp: state.signUpAuth.passwordSignUp

})

const mapDispatchToProps = (dispatch) => ({
  signUp: () => dispatch(signUp()),
  onEmailSignUpChangeAction: (event) => dispatch(onEmailSignUpChangeAction(event.target.value)),
  onPasswordSignUpChangeAction: (event) => dispatch(onPasswordSignUpChangeAction(event.target.value)),
});


export default withRouter(connect(mapStateToProps, mapDispatchToProps)(SignUp));

Reducers.js

const initialState = {
    emailSignUp: '',
    passwordSignUp: '',
    errorTextEmailSignUp: '',
    errorTextPasswordSignUp: ''

}
export default (state = initialState, action) => {
    switch (action.type) {
        case EMAIL_SIGN_UP_CHANGE:
            return {
                ...state,
                emailSignUp: action.email
            }
        case PASSWORD_SIGN_UP_CHANGE:
            return {
                ...state,
                passwordSignUp: action.password
            }
        case EMPTY_SIGN_UP_EMAIL:
            return {
                ...state,
                errorTextEmailSignUp: 'This field is required'
            }
        case EMPTY_SIGN_UP_PASSWORD:
            return {
                ...state,
                errorTextPasswordSignUp: 'This field is required'
            }
        default:
            return state
    }
}

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Если вы хотите передать this.props.emailSignUp и this.props.passwordSignUp в вашу функцию signUp, вы можете попробовать:

export const signUp = (email, password) => { return (dispatch) => {

if (email === '') {
    dispatch({ type: EMPTY_SIGN_UP_EMAIL })
}
else if (password === '') { 
    dispatch({ type: EMPTY_SIGN_UP_PASSWORD })
 }
else {
    firebaseAuth.createUserWithEmailAndPassword(email, password)
        .then(() => console.log('signUpok'))
            .catch( function (error) {
                    let errorCode = error.code;
                    let errorMessage = error.message;
                    alert(errorMessage)
            });



    }
  }
}

Затем вызовите вашу функцию this.props.signUp(this.props.emailSignUp, this.props.passwordSignUp)

0 голосов
/ 02 января 2019

Вы назначаете возврат метода signUp подписанной переменной, но этот метод ничего не возвращает.Поскольку его выполнение асинхронно, вам может потребоваться отправить действие, которое заставит редуктор сохранить созданного пользователя в состоянии, когда создание завершилось успешно, а затем использовать селектор для извлечения этого пользователя, например.

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