【发布时间】: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