Javascript Firebase权限被拒绝

Javascript Firebase权限被拒绝,javascript,firebase,firebase-realtime-database,firebase-security,Javascript,Firebase,Firebase Realtime Database,Firebase Security,我对编码比较陌生,有点麻烦 我有这个代码可以将数据发送到firebase app.userid=app.user.uid var userRef=app.dataInfo.child(app.users); var useridRef=userRef.child(app.userid); useridRef.set({ 地点:“, 主题:“, 配色方案:“, 食物:“ }); 然而,我不断得到错误: FIREBASE警告:设置为/users/(GoogleID)失败:权限被拒绝 2016-05

我对编码比较陌生,有点麻烦

我有这个代码可以将数据发送到firebase

app.userid=app.user.uid
var userRef=app.dataInfo.child(app.users);
var useridRef=userRef.child(app.userid);
useridRef.set({
地点:“,
主题:“,
配色方案:“,
食物:“
});
然而,我不断得到错误:

FIREBASE警告:设置为/users/(GoogleID)失败:权限被拒绝 2016-05-23 22:52:42.707 firebase.js:227未捕获(承诺中)错误:权限被拒绝:权限被拒绝(…)

当我试着去查这篇文章时,它谈到了Firebase的规则,这似乎是一种我还没有学会的语言(或者它只是在我的脑海中闪过)。有人能解释是什么导致了这个问题吗?我以为是我要求它存储电子邮件和用户显示名称,而你只是不允许这样做,但当我把它们拿出来时,我仍然有同样的问题。有没有一种方法可以避免这种错误而不设置规则,或者规则是我可以在一天内教会自己如何写作的东西,或者我只是不适合自己


谢谢你的帮助

默认情况下,中的项目中的数据库只能由管理用户可读/写(例如,在云函数中,或使用Admin SDK的进程中)。常规客户端SDK的用户无法访问数据库,除非您更改服务器端安全规则


您可以更改规则,以便只有经过身份验证的用户才能读取/写入数据库:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

但是,由于您没有从代码中登录用户,因此数据库拒绝您访问数据。要解决此问题,您需要允许未经验证的访问数据库,或者在访问数据库之前登录用户

允许对数据库进行未经身份验证的访问 目前最简单的解决方法(直到教程更新)是进入项目控制台中的“数据库”面板,选择“规则”选项卡,并用以下规则替换内容:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}
这使得任何知道数据库URL的人都可以读写新数据库在投入生产之前,请确保再次保护您的数据库,否则可能会有人开始滥用它。

在访问数据库之前登录用户 要获得(稍微)更耗时但更安全的解决方案,请调用的
signIn…
方法之一,以确保用户在访问数据库之前已登录。最简单的方法是:

然后在检测到登录时附加侦听器

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
    var isAnonymous = user.isAnonymous;
    var uid = user.uid;
    var userRef = app.dataInfo.child(app.users);
    
    var useridRef = userRef.child(app.userid);
    
    useridRef.set({
      locations: "",
      theme: "",
      colorScheme: "",
      food: ""
    });

  } else {
    // User is signed out.
    // ...
  }
  // ...
});

默认情况下,中的项目中的数据库仅可由管理用户读取/写入(例如,在云函数中或使用Admin SDK的进程中)。常规客户端SDK的用户无法访问数据库,除非您更改服务器端安全规则


您可以更改规则,以便只有经过身份验证的用户才能读取/写入数据库:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

但是,由于您没有从代码中登录用户,因此数据库拒绝您访问数据。要解决此问题,您需要允许未经验证的访问数据库,或者在访问数据库之前登录用户

允许对数据库进行未经身份验证的访问 目前最简单的解决方法(直到教程更新)是进入项目控制台中的“数据库”面板,选择“规则”选项卡,并用以下规则替换内容:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}
这使得任何知道数据库URL的人都可以读写新数据库在投入生产之前,请确保再次保护您的数据库,否则可能会有人开始滥用它。

在访问数据库之前登录用户 要获得(稍微)更耗时但更安全的解决方案,请调用的
signIn…
方法之一,以确保用户在访问数据库之前已登录。最简单的方法是:

然后在检测到登录时附加侦听器

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
    var isAnonymous = user.isAnonymous;
    var uid = user.uid;
    var userRef = app.dataInfo.child(app.users);
    
    var useridRef = userRef.child(app.userid);
    
    useridRef.set({
      locations: "",
      theme: "",
      colorScheme: "",
      food: ""
    });

  } else {
    // User is signed out.
    // ...
  }
  // ...
});
  • 打开firebase,选择左侧的数据库
  • 现在在右侧,从“淹没”菜单中选择[Realtime database],并将规则更改为:
  • 打开firebase,选择左侧的数据库
  • 现在在右侧,从“淹没”菜单中选择[Realtime database],并将规则更改为:
  • 转到您提到的“数据库”选项

  • 在蓝色标题上,你会看到一个下拉列表,上面写着CloudFireStore测试版
  • 将其更改为“实时数据库”
  • 进入“规则”并设置。写入。读取这两个设置为true
  • 复制自。

    转到您提到的“数据库”选项

  • 在蓝色标题上,你会看到一个下拉列表,上面写着CloudFireStore测试版
  • 将其更改为“实时数据库”
  • 进入“规则”并设置。写入。读取这两个设置为true

  • 复制自。

    我遇到了类似的问题,并发现此错误是由于为实时数据库的读/写操作设置了不正确的规则所致。默认情况下,google firebase现在加载的是云存储而不是实时数据库。我们需要切换到实时并应用正确的规则

    正如我们看到的,云Firestore不是实时数据库,一旦切换到正确的数据库,请应用以下规则:

    {
       "rules": {
           ".read": true,
           ".write": true
         }
     }
    

    我遇到了类似的问题,并发现此错误是由于为实时数据库的读/写操作设置了不正确的规则所致。默认情况下,google firebase现在加载的是云存储而不是实时数据库。我们需要切换到实时并应用正确的规则

    正如我们看到的,云Firestore不是实时数据库,一旦切换到正确的数据库,请应用以下规则:

    {
       "rules": {
           ".read": true,
           ".write": true
         }
     }
    

    转到数据库,标题旁边有两个选项:

    云Firestore,实时数据库

    选择实时数据库并转到规则


    将规则更改为true。

    转到数据库,标题旁边
    {
      "rules": {
        "users": {
          "$uid": {
            ".write": "$uid === auth.uid"
          }
        }
      }
    }