添加回调到Firebase登录功能

时间:2018-02-10 01:48:16

标签: javascript reactjs firebase firebase-authentication

我对React和Firebase的使用相当新。现在我有一个Firebase.js文件,我存储并导出了我的所有函数和consts。这就是它的样子:

export const auth = firebase.auth();

export function performLogin(email, password) {
  auth.signInWithEmailAndPassword(email, password).then(function(data) {
    //Works
  }).catch(function(error) {
    //Does not work
  });
}

所以,我有这个login.js,我正在调用performLogin,我想知道最好的方法是什么?如何创建回调,或者至少读取任何类型的返回消息?这就是我调用performLogin的方式:

clickLogin(e){

    e.preventDefault();
    performLogin(this.state.email, this.state.password);
}

这是有效的,因为控制台输出告诉我登录是否成功。但是,我希望能够使用此功能来检索登录状态,然后确定是否应该提示错误消息或将用户推送到管理仪表板。我该怎么做?

是否可以像这样调用performLogin?

performLogin(this.state.email,this.state.password,(callback)){
 if (callback == true) { //Success } else { //Error }
}

1 个答案:

答案 0 :(得分:4)

您的performLogin函数可以采用第三个参数,一个回调函数,它存在于clickLogin()方法所在的位置:

export function performLogin(email, password, callback) {
  auth.signInWithEmailAndPassword(email, password).then(function(data) {
    //Works
    callback(data);
  }).catch(function(error) {
    //Does not work
    callback({ error });
  });
}

loginResult(result) {
    if(result.error) {
        //failed
    } else {
        //logged in
    }
}

clickLogin(e){
    e.preventDefault();
    performLogin(this.state.email, this.state.password, this.loginResult);
}

或者您可以返回signInWithEmailAndPassword()返回并在组件中处理它的承诺。

export function performLogin(email, password) {
    return auth.signInWithEmailAndPassword(email, password);
}

clickLogin(e){
    e.preventDefault();
    performLogin(this.state.email, this.state.password)
        .then(result => //logged in)
        .catch(error => //failed)
};