代码之家  ›  专栏  ›  技术社区  ›  dragi

React/Firebase-如何确保在重定向之前进行更新?

  •  0
  • dragi  · 技术社区  · 6 年前

    在“我的应用”中,用户可以用自己的电子邮件地址和密码注册(都是Firebase),默认情况下,用户不会有自己的密码 displayName photoURL 设置是否使用电子邮件/密码注册。这就是为什么我试图在他们提交注册表格的那一刻通过添加这两个字段来更新他们的个人资料。

    显示名称 还有照片( )但是,即使我设置了这些字段,主页也不会及时获取这些字段,我总是要刷新页面以显示这些详细信息。

    我能帮点忙吗\

    onSubmit = event => {
        const { displayName, photoURL, email, passwordOne } = this.state;
        const { history } = this.props; /* eslint-disable-line */
    
        authFunctions
            .doCreateUserWithEmailAndPassword(email, passwordOne)
            .then(session => {
                auth.currentUser.updateProfile({
                    displayName,
                    photoURL
                });
                db.doCreateUser(session.user.uid, displayName, photoURL, email)
                    .then(() => {
                        this.setState({ ...INITIAL_STATE });
                        history.push(routes.HOME);
                    })
                    .catch(error => {
                        this.setState(byPropKey('error', error));
                    });
            })
            .catch(error => {
                this.setState(byPropKey('error', error));
            });
    
        event.preventDefault();
    };
    

    正如您在我的代码中看到的,我正在Firebase上创建用户,然后将它们添加到数据库中。我试图更新配置文件后,我创建了实际的用户,但由于某些原因,它没有拿起它。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Callam    6 年前

    您正在更新Firebase用户配置文件,同时在数据库中创建用户配置文件。它很可能在更新完成之前路由到主屏幕。

    return auth.currentUser.updateProfile({ displayName, photoURL }).then(() => {
        db.doCreateUser(session.user.uid, displayName, photoURL, email).then(() => {
            this.setState({ ...INITIAL_STATE });
            history.push(routes.HOME);
        })
    })
    

    在更新Firebase用户之后添加一个then,然后在数据库中创建用户配置文件。