React / Firebase-如何确保重定向之前发生更新?

时间:2018-10-07 10:07:15

标签: javascript reactjs firebase session

在我的应用中,用户可以使用其电子邮件地址和密码(全部使用Firebase)进行注册,并且默认情况下,如果用户使用电子邮件/密码进行注册,则不会设置其displayNamephotoURL 。这就是为什么我要在他们提交注册表单时通过添加这两个字段来更新他们的个人资料的原因。

成功注册后,用户会重定向到我试图显示的受保护主页,但您猜错了他们的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 个答案:

答案 0 :(得分:1)

您正在更新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用户后添加一个,然后“然后”在数据库中创建用户配置文件。