Jar*_*ski 2 angularjs firebase firebase-security
我的原始标题是"如何在Firebase中构建和保护用户(帐户)数据,以确保用户安全访问." 因为这是这个问题的领域,但后来我认为可以形成一个更普遍的问题.说我熟悉
https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html
但是和本文一样,它不太适用于我的问题,所以我走了
首先,我将使用简单登录电子邮件/密码验证类型(但如果验证用户的电子邮件必须涉及服务器端编码,则可能会使用Persona).
我有一个userData对象,其中存储有用户数据(读取用户帐户).要求每个用户只能读取存储在自己帐户中的数据.所有用户将访问的实际数据将存储在名为comingData的单独节点中.
用户可以访问来自即将到来的数据的哪些数据将取决于用户所做的购买类型:
具有"订阅"类型的那些数据将能够访问所有数据,直到他们的订阅到期为止.我假设"now"变量可用于通过安全表达式实现此目的.
具有"购买"类型的用户只能访问购买的数据(在数组中列出).
admin@mydomain.com需要能够读取所有用户的所有数据,但只能写入(并读取)即将到来的DATA节点.
所以这是我试图保存到Firebase的测试数据结构:
new Firebase(url).update({
userData: {
"admin@mydomain.com" : {
subscription : {expire : '9999999999999'},
purchase : []
},
"testUser@somwhere.com" : {
subscription : {expire : '1379904665974'},
purchase : ['upcomingData/-J47idp64ANBRmFS5rVY', 'upcomingData/-J47idpHg-pwzW1c-rfw', 'upcomingData/-J47idpLfIhlUQWTPc9y']
},
"testUser2@somwhereelse.co.uk" : {
subscription : {expire : '1379904734517'},
purchase : ['upcomingData/-J47idp64ANBRmFS5rVY', 'upcomingData/-J47idpHg-pwzW1c-rfw', 'upcomingData/-J47idpLfIhlUQWTPc9y']
}
}
});
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为'.' 字符.
我应该像这样去DOT mangle:
"admin@mydomainDOTcom" : {...}
Run Code Online (Sandbox Code Playgroud)
或者更确切地说,我应该在创建到userData节点时将()"空"用户帐户推送到userData节点,并将用户的用户名保存为{"id":"admin@mydomain.com"}属性?
如何在Firebase中设置安全规则,以便userData的内容在任何时候都是只读的,除了在成功购买时写入(比如使用PayPal)?
这可以安全地完成而无需借助服务器代码吗?
我知道我可以设置安全规则,以便只有服务器可以将数据写入Firebase,但这将涉及服务器端代码,然后编写适当的数据以响应有效的PayPal支付通知(IPN) - 服务器我宁愿避免使用的代码,不仅因为我不太熟悉服务器端编码(虽然应该能够成功接收node.js),还因为LAMP堆叠共享服务器仍然比需要的VPS便宜得多对于节点(aaand我不能做php :().
客户端代码将使用很棒的Angular.js/angularFire组合开发.
感谢你的时间,
Jared
这里有两个不同的问题,分别处理:
对于"." 字符,您可以用","替换它们.简单登录将自动为您执行此操作,例如,如果您使用的是角色提供程序,则可以通过userObject.id(以及userObject.email中的真实电子邮件地址)访问转义的电子邮件地址.
要创建只读记录(第一次除外),您可以使用如下规则:
".write": "!data.exists()"
Run Code Online (Sandbox Code Playgroud)
这将防止记录被写入一次后被修改.
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |