【问题标题】:Proper way to have initial properties for users in Firebase [with react]在 Firebase 中为用户提供初始属性的正确方法 [with react]
【发布时间】:2017-10-15 17:30:15
【问题描述】:

我想构建一个用户可以使用 Github 登录的应用程序(目前,未来可能还有 Facebook、Google+)。

我想知道当用户第一次登录时我怎么会有初始属性,将来会被修改?

在我的 App 组件中,我有一个 onAuthStateChanged 函数,它将用户信息推送到数据库中,但问题是(显然)它每次都会这样做:

    firebaseAuth.onAuthStateChanged((user) => {
        if (user) {
            this.setState({
                user
            });

            usersRef.push({
                id: user.uid,
                displayName: user.displayName,
                coins: 3000
            });
        } else {
            this.setState({
                user: undefined
            });
        }
    });

有没有办法检查用户之前是否登录过?有没有更好的方法来实现我想要的?

【问题讨论】:

  • 嗨弗洛林,你读过高阶组件吗?
  • .onAuthStateChanged 是如何正确地做到这一点。此方法不会在任何地方推送任何内容。
  • @RonRoyston,你能给我一点提示吗?
  • .onAuthStateChanged 是异步的,如果您注意到即使您已登录(通过任何 oAuth 提供商或电子邮件),您的页面也可能会在从注销到登录刷新时闪烁。换句话说, console.log .currentUser.email 或其他东西,注意它是如何在页面刷新时触发两次的,一次是null,然后(如果您已登录)是billy@foo.com。因此,使用该方法来驱动您的应用程序的状态。希望有帮助。我不使用 react 但这个 vanilla js 示例可能会有所帮助github.com/rhroyston/firebase-auth

标签: javascript reactjs firebase


【解决方案1】:

也许您可以使用 https://firebase.google.com/docs/functions/auth-events 中记录的 Firebase 身份验证触发器。

您可以设置一个触发器,在创建用户后在 Firebase 服务器上运行一次;该触发器可以为用户更新数据库中的数据,其中可能包括默认某些值。然后,您的 React 应用程序将能够在需要时读取该数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 2019-05-04
    相关资源
    最近更新 更多