热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

允许特定用户写入访问权限

如何解决《允许特定用户写入访问权限》经验,为你挑选了1个好方法。

我的Firebase读/写规则受到了阻碍.我希望我有办法设置断点,因为它正在检查身份验证(没有办法,是吗?).

我的问题很简单,我觉得我应该能够更好地理解它.我觉得大部分源于完全不了解规则.此信息用于在线查看产品的简单方法,并且所有者需要能够添加产品.所以我希望世界能够阅读,登录的人能够写作.

我的数据如下:

app
 Users
    email: xxx@xxx.com
 product
   0
     name: pizza

我的规则:

 {
    "rules": {
      "product":{
        ".read": true,
        ".write":"root.child('Users').child(auth.uid).child('email').val() === 'testuser@test.com'"
      }
    }
}

我对这意味着什么并不了解.我真的只想说,如果用户登录,则允许写入功能.我希望我可以这样的".write": "auth"意思,如果auth存在(用户登录)然后让他写.但我显然不完全明白规则如何运作.我正在使用简单的电子邮件/密码验证.

如何测试这些规则以及如何将参数传递给它们?



1> Frank van Pu..:

我将尝试解释您的.write安全规则,即:

"root.child('Users').child(auth.uid).child('email').val() === 'testuser@test.com'"

这确实不是最容易开始的规则,Firebase文档确实很快就深入了解.

在使用twitter登录我的应用程序后,我的代码将获得一个authData变量来告诉它:

 authData
     uid: "twitter:4511241"
     provider: "twitter"
     id: "4511241"

可能还有一些属性,但这应该是它的要点.authData通常包含一个子对象,该对象具有特定于提供者的属性,因此在这种情况下twitter,您通常可以在那里找到一些非常有趣的东西.例如在Twitter的情况下,用户的推特名称.

 authData
     uid: "twitter:4511241"
     provider: "twitter"
     id: "4511241"
     twitter:
         userName: "puf"
         email: "puf@twitter.com" // note: this is just an example email address,
                                  // it doesn't exist (as far as I know)

此对象可供我的代码使用,默认情况下不会存储在Firebase中的任何位置.

在安全规则中,您可以检查相同的结构.但是这里只提供了一小部分信息,足以识别用户.auth对象的Firebase文档为这些属性命名:

提供者 | 使用的验证方法("密码","匿名","Facebook","github","谷歌"或"推特").

uid |唯一的用户ID,保证在所有提供商中都是唯一的.

有了这些属性,我们就可以允许特定用户对我们的数据进行写访问.就像我在评论中所说的那样:

".write": "auth.uid = 'twitter:4511241'"

这将允许我在使用@puf twitter帐户登录时写入数据.但不幸的是,它不允许我检查更多用户友好的属性,例如电子邮件地址.

通常的做法是Users在Firebase中创建顶级节点,并为该节点下的所有用户添加由其uid标识的所有信息.所以我的情况如上:

 Users
     twitter:4511241
         userName: "puf"
         displayName: "Frank van Puffelen"
         email: "puf@twitter.com"
     github:913631
         userName: "puf"
         displayName: "Frank van Puffelen"
         email: "puf@github.com"

我离开了提供商和id,因为他们没有为这个例子提供太多价值

当您了解用户时uid,可以在此节点中查找其他信息.这正是您以前的安全规则所做的:

"root.child('Users').child(auth.uid).child('email').val() === 'testuser@test.com'"

因此,这将从您的Firebase的根目录,对于名为Users的节点,然后uid是登录用户的节点以及他/她的电子邮件地址.

检查特定电子邮件地址的一个很酷的事情是,它与用户的提供商无关.因此,无论用户是使用twitter,github,facebook还是其他一些受支持的提供商登录,只要他们为每个帐户使用相同的电子邮件地址,他们就能够写入数据.


推荐阅读
author-avatar
男孩艹艹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有