【问题标题】:Warning when trying to update firebase realtime database尝试更新 Firebase 实时数据库时发出警告
【发布时间】:2020-09-29 16:59:43
【问题描述】:

我有一个带有 Firebase 的应用,用户可以在其中登录他们的帐户。唯一的问题是,当我想注销时,我想删除我之前保存在数据库中的一些信息,但由于某种原因,数据库没有得到更新,并且出现了以下警告消息:

错误:[数据库/权限被拒绝] 客户端无权访问所需数据

我猜这是因为更新代码没有足够的时间来执行指令。我的代码如下所示(由按下按钮触发):

onPressLogout = () => {
  const { navigation } = this.props;
  const userId = auth().currentUser.uid;

  database().ref(`users/${userId}`).update({ tokens: '' });
  auth().signOut().then(() => navigation.navigate('Auth'));
}

感谢任何帮助。

【问题讨论】:

  • 通常这意味着您的安全规则未正确配置以访问数据。你能分享你的安全规则吗?
  • @MohammadFaisal 我的规则是这样的"rules": { ".read": "auth != null", ".write": "auth !== null" }
  • 如果您有其他信息,您应该使用编辑链接编辑问题以添加该信息。不要将信息隐藏在 cmets 中。
  • 请确保您能够记录userId 的有效值。我们在这里看不到您正在处理的内容。

标签: reactjs firebase react-native firebase-realtime-database


【解决方案1】:

似乎注销发生在 update 操作之前,然后由于用户不再登录而失败。

最简单的方法是等到写入完成后再退出。您可以使用await

await database().ref(`users/${userId}`).update({ tokens: '' });
auth().signOut().then(() => navigation.navigate('Auth'));

或者用更经典的then()

database().ref(`users/${userId}`).update({ tokens: '' }).then(()=> {
  auth().signOut().then(() => navigation.navigate('Auth'));
})

【讨论】:

  • 虽然第二种方法确实可以解决更新问题,但由于某种原因它没有解决警告问题,但它一直出现。现在,我在auth 之前添加了一个console.log(),这似乎已经修复了它,尽管这是一种笨拙的方式。也许还有另一种更“花哨”的方式?
  • 我的感觉是,在这种情况下,警告可能来自其他地方。例如:您是否在代码中的其他地方附加了一个侦听器,需要对用户进行身份验证。如果是这样,当您注销用户时,该侦听器将被取消。为了防止记录表明这一点,在这种情况下,您需要在退出之前删除侦听器。但由于您在那之后马上离开,因此净收益非常小。
  • 经过一点点挖掘,我在另一个屏幕上找到了一个监听器。它负责接收用户在登录时可能会收到的通知。我摆脱这个监听器的方法是这样的:componentWillUnmount() { if (this.screenListener) this.screenListener.remove(); }。由于错误是这样出现的,我认为这还不足以关闭侦听器。有什么建议吗?
  • 抱歉,我们缺少上下文,它显着改变了问题。您可能想重现仅使用其他屏幕未删除侦听器的问题,并仅使用该代码发布问题。
【解决方案2】:

React 是异步的,因此它不会等待 line 100% 执行,而是执行进一步的代码。 await 的使用应该可以完成这项工作:

async onPressLogout(){
  const { navigation } = this.props;
  const userId = auth().currentUser.uid;

  await database().ref(`users/${userId}`).update({ tokens: '' });
  auth().signOut().then(() => navigation.navigate('Auth'));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多