使用auth.uid限制访问Firebase数据库无效

5
我希望限制对我的Firebase数据库的访问,只有我授权的用户才能写入。 但是几乎所有提出的解决方案都似乎对我无效。
我总是在控制台中收到401(未经授权)错误消息。
我尝试了两种检查正确用户是否已登录的方法,但都没有起作用:
1. 在规则中硬编码uid。
{
"rules": {
  ".read": true,
  ".write": "auth.uid === 'UID'")",
    }
}

2. 数据库中的uid

{
"rules": {
  ".read": true,
  ".write": "root.child('users').hasChild(auth.uid)",
    }
}

我在这两种方式中都使用了Firebase认证概述中提供的uid。

我使用Google作为登录提供程序。

2个回答

4

文档中得知:

以下是一个授权规则示例,允许经过身份验证的用户对/users/<uid>/进行写入操作,其中<uid> 是通过Firebase认证获取的用户ID。


编辑:

对于特定路径和通过Firebase认证获得的当前用户,这应该有所帮助:

{
  "rules": {
    "YourSpecificPath": {

     "$uid": { // where <uid> is the ID of the user obtained through Firebase Authentication
        ".write": "$uid === auth.uid"    
        ".read": true,

      }
    }
  }
}

或者直接给出uid

{
  "rules": {
    ".read": true,
    ".write": "auth.uid === 'dJrGShfgfd2'"
  }
}

谢谢你的答案。 我不想为一个用户授予对特定路径的访问权限。 我想实现一个用户可以写入所有数据。而其他人都无法。这可能吗? - Karl Hofmann
那么我是否需要将整个数据库封装到uid中? 用户应该拥有类似管理员功能的东西。 - Karl Hofmann
在这种情况下,您也可以直接提供uid(作为管理员)。请查看Frank的答案:https://dev59.com/ZFgR5IYBdhLWcg3wEp4v#41775839 已更新答案。 - ʍѳђઽ૯ท
好的,现在我感觉真的很蠢了... 我切换到了axios,但是忘记在我的Patch请求中发送idToken...结果就是未经授权...不管怎样还是谢谢你 :) - Karl Hofmann

1

所有代码示例都是正确的

所有问题和Mohsen的回答中的代码片段都可以使用。我只是忘记在我的修补请求中发送idToken。

获取idToken的代码:

firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
  // Send token to your backend via HTTPS
  // ...
}).catch(function(error) {
  // Handle error
});

来源: https://firebase.google.com/docs/auth/admin/verify-id-tokens#retrieve_id_tokens_on_clients

使用idToken进行身份验证:

https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>

来自: https://firebase.google.com/docs/database/rest/auth


1
那么我相信你应该接受我的答案,因为它是正确的。不过,你的解释得到了我的点赞,这对未来的搜索会很有帮助 :) 祝编码愉快。 - ʍѳђઽ૯ท

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接