Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase authentication with Redux-Saga not working

I am trying to create a new user using firebase auth. I am using redux-saga to make the above call.

Below is my saga.js:

import { takeLatest, put } from 'redux-saga/effects';
import { SIGN_UP, AUTHENTICATION_FAILED, SIGN_UP_SUCCESS} from '../actions/index';
import firebase from 'firebase';


function* signUp(action){
    console.log("about to call authentication"); // This being printed
    firebase.auth().createUserWithEmailAndPassword(action.user.email, action.user.password)
            .then(function*(result){
                    console.log("success"); // Not being loged
                    yield put({SIGN_UP_SUCCESS, user: action.user});
            }).catch(function*(error){
                    console.log("failed"); //Not being loged
                    let error_message = { code: error.code, message: error.message};
                    yield put({AUTHENTICATION_FAILED, error: error_message});
            });
}

function* rootSaga(){
  yield takeLatest(SIGN_UP, signUp);
}

export  default rootSaga;

The code inside then and catch is not being executed, Sign Up generator function is being called. Can anyone please tell me what I am doing wrong?

like image 935
Sumanth Jois Avatar asked Jan 10 '18 06:01

Sumanth Jois


1 Answers

A more redux-saga idiomatic way of writing the code would look like this:

function* signUp(action){
  try {
    const auth = firebase.auth()
    const result = yield call(
      [auth, auth.createUserWithEmailAndPassword],
      action.user.email,
      action.user.password
    )

    yield put({ type: SIGN_UP_SUCCESS, user: action.user });
  } catch (error) {
    const error_message = { code: error.code, message: error.message };

    yield put({ type: AUTHENTICATION_FAILED, error: error_message });
  }
}

Please see https://redux-saga.js.org/docs/api/#callcontext-fn-args for call's documentation.

like image 162
Alex Avatar answered Nov 11 '22 11:11

Alex