firebase - 用户第一次注册后再次登录

时间:2021-04-18 14:57:59

标签: javascript reactjs firebase firebase-authentication

大家好,我遇到了这样的问题, 用户首次注册我的网站后,我想再次与该用户一起登录。

我希望他注册后重新连接。

我尝试异步进行,但并不总是有效,有时我尝试在用户注册之前登录,我不知道为什么它不起作用。

我希望只有注册后才能登录,强制登录。

  handleSubmit = async () => {
    
    const newUserData = {
      email: 'test@mail.com',
      password: '123456',
      confirmPassword: '123456',
      handle: 'test'
    };

    await signupUser(newUserData);
    await signinChat(newUserData);
  }

export const signupUser = (newUserData) => (dispatch) => {
  axios
    .post('/signup', newUserData)
    .then((res) => {
      console.log(res);
    })
    .catch((err) => {
      console.log(err);
    });
};



//basically call to this function to signup

exports.signup = (req, res) => {
  const newUser = {
    email: req.body.email,
    password: req.body.password,
    confirmPassword: req.body.confirmPassword,
    handle: req.body.handle,
  };

  db.doc(`/users/${newUser.handle}`)
    .get()
    .then((doc) => {
      if (doc.exists) {
        return res.status(400).json({ handle: "this handle is already taken" });
      } else {
        return firebase
          .auth()
          .createUserWithEmailAndPassword(newUser.email, newUser.password);
      }
    })
    .then((data) => {
      userId = data.user.uid;
      return data.user.getIdToken();
    })
    .then((idToken) => {
      token = idToken;
      const userCredentials = {
        handle: newUser.handle,
        email: newUser.email,
      };
      const userPreferences = {
        handle: newUser.handle
      };

      return db.doc(`/users/${newUser.handle}`).set(userCredentials);
    })
    .then(() => {
      return res.status(201).json({ token });
    })
    .catch((err) => {
      console.error(err);
      if (err.code === "auth/email-already-in-use") {
        return res.status(400).json({ email: "Email is already is use" });
      } else {
        return res
          .status(500)
          .json({ general: "Something went wrong, please try again" });
      }
    });
};

export const signinChat = (user) => {
    return async (dispatch) => {
        const db = firebase.firestore();
        firebase.auth()
            .signInWithEmailAndPassword(user.email, user.password)
            .then(data => {
                console.log(data);
                const currentUser = firebase.auth().currentUser;
                const name = `${user.handle}`;
                currentUser.updateProfile({
                    displayName: name,
                })
                    .then(() => {
                        db.collection('users')
                            .doc(data.user.displayName)
                            .update({
                                isOnline: true,
                            })
                            .then(() => {
                                const loggedInUser = {
                                    handle: user.handle,
                                    uid: data.user.uid,
                                    email: user.email
                                }
                                localStorage.setItem('user', JSON.stringify(loggedInUser));
                                console.log('User logged in successfully...!');
                            })
                            .catch(error => {
                                console.log(error);
                            });
                    });
            })
            .catch(error => {
                console.log(error);
            })
    }
}

当我尝试第二次连接时,有时它不起作用,例如: 显示错误的图像:

enter image description here

0 个答案:

没有答案