javascript – 如何实现firebase服务器端安全性
作者:互联网
我目前正在开发一个新的谷歌聚合物网络应用程序,并想知道我是否应该使用firebase作为后端/数据库.我看了一下这个项目,制作了一些测试应用程序,非常喜欢它!但要完全说服我,那个firebase是要走的路我需要回答以下问题:
>我对安全性有点担心:所以,我知道,firebase使用读取,写入和验证来实现服务器端安全性.从样本中,我注意到验证基本上是一个单行的JS脚本,代表一个’if’.由于我打算构建一个Web电子商务应用程序,我需要验证一些输入.是否有可能将验证外包在一个单独的文件中,以使其更具可读性?另外,我想知道,如果有可能,测试这些服务器端验证,例如单元测试?
>目前我不是100%确定,firebase可以涵盖我们所有的用例.对于某些关键功能使用“正常”后端然后将后端数据保存在firebase中是否可能/一个好的解决方案?
>我看到一些很好的聚合物元素用于firebase.聚合物/网络组件是否支持firebase 100%?
>是否有其他方法(如Java方法)来实现服务器业务逻辑?
>有没有办法定义更新脚本,以便可以轻松地将新版本推送到生产环境?
谢谢&亲切的问候
渣
解决方法:
所以,我问火柱支持并得到以下答案:
很高兴见到你.
>我对安全性有点担心:所以,我知道,firebase使用读取,写入和验证来实现服务器端安全性.从样本中,我注意到验证基本上是一个单行的JS脚本,代表一个’if’.由于我打算构建一个Web电子商务应用程序,我需要验证一些输入.是否有可能将验证外包在一个单独的文件中,以使其更具可读性?另外,我想知道,如果有可能,测试这些服务器端验证,例如单元测试?
您可以使用我们的安全规则语言实现极其复杂和有效的规则.您可以将安全规则部署为托管部署过程的一部分,也可以通过REST API部署.将内容分解为服务器上的多个文件是不可能的,但您当然可以构建自己的流程,将多个文件合并为一个JSON结果.
>目前我不是100%确定,firebase可以涵盖我们所有的用例.对于某些关键功能使用“正常”后端然后将后端数据保存在firebase中是否可能/一个好的解决方案?
一般来说,同步Firebase和SQL后端不是很实用,并且它们不能很好地转换.它可能完全是多余的.
>我看到一些很好的聚合物元素用于firebase.聚合物/网络组件是否支持firebase 100%?
在这种情况下,我不知道100%支持的含义.我们提供JavaScript SDK,因此他们应该一起玩.
>是否有其他方法(如Java方法)来实现服务器业务逻辑?
我们提供Java,Objective-C / Swift,Android,Node.js,JavaScript和REST API的官方SDK,以便与其他语言一起使用.
>有没有办法定义更新脚本,以便可以轻松地将新版本推送到生产环境?
我不确定这意味着什么.很可能答案是否定的,因为我们不提供构建过程或任何工具来发布您的软件.
我希望有所帮助!
我回答了:
感谢您提供的信息,它对我帮助很大!在阅读了关于问题5的回答后,又出现了一个问题:
…
5.有没有办法定义更新脚本,以便可以轻松地将新版本推送到生产环境?
我不确定这意味着什么.很可能答案是否定的,因为我们不提供构建过程或任何工具来发布您的软件.
是否有关于如何处理数据库模式的最佳实践?在我的案例中,我只有一个Web应用程序(没有应用程序等)…我希望,数据库会随着时间的推移而发生巨大变化.我是否应该编写JS逻辑,检查当前数据库版本并更新它,如果有必要的话?也许这会成为一个很好的功能……
例如:我部署了我的应用程序的1.0版,一切正常.经过3个月的编程后,我注意到用户数据需要另一个属性:address,这是一个’not null’属性.我现在部署了我的应用程序的2.0版本,并且每个新注册用户都有一个地址,但旧用户(来自版本1.0)没有此字段或值.
我该怎么处理?
支持回应:
嗨马克,
这里没有最好的做法,但你的想法似乎相当合理.您可能不需要签入JavaScript.您可以在用户的配置文件中存储版本号,当它们升级到最新软件时,您可以在其配置文件数据中升级该版本号.
然后您的验证规则可以使用以下内容:
{
"user": {
".write": "newData.hasChild('address') || newData.child('appVersion') < 4",
"address": {
".validate": "newData.isString() && newData.val().length < 1000"
}
}
}
因此,如果您担心版本控制,可以使用它来处理旧版本.
我从开发人员那里看到的另一种流行方法是通过复制数据来进行中间升级.因此,您发布了一个中间版本,该版本使用更新的数据结构写入旧路径和新路径(这使得应用程序可以保留旧用户,直到升级为止).一旦合理百分比的客户端升级,然后发布最终版本,不再对旧结构和新结构进行双重写入.
当然,由于模块化数据结构更容易适应变化,因此平坦化数据虽然使得加入和获取数据更加困难,但会使升级变得更加容易.当然,一个实用的设计,你将各种记录包装在一个类中(例如带有getter / setter方法的UserProfile类)使转换变得更简单,因为你可以轻松地在一个地方进行版本控制.
希望这有助于某人:)
标签:javascript,polymer,firebase,firebase-security 来源: https://codeday.me/bug/20190623/1272328.html