栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Firebase中使用NodeJ-安全性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Firebase中使用NodeJ-安全性

从本质上讲,这里的问题是,您需要安全地向您的NodeJS服务器传达已通过Firebase身份验证的客户端。有几种方法可以解决此问题,但最简单的方法可能是让所有客户端<->
NodeJS通信都通过Firebase本身进行。

因此,不要让客户端点击由NodeJS服务器提供服务的REST端点,而是让客户端写入NodeJS服务器正在监视的Firebase位置。然后,您可以使用Firebase安全规则来验证客户端写入的数据,并且服务器可以信任该数据。

例如,如果您想这样做,以便用户可以通过您的应用程序发送任意电子邮件(NodeJS服务器负责实际发送电子邮件),则可以在/
emails_to_send位置设置以下规则:

{  "rules": {    "emails_to_send": {      "$id": {        ".write": "!data.exists() && newData.child('from').val() == auth.email",        ".validate": "newData.hasChildren(['from', 'to', 'subject', 'body'])"      }    }  }}

然后在客户端中,您可以执行以下操作:

ref.child('emails_to_send').push({  from: 'my_email@foo.com',   to: 'joe@example.com',   subject: 'hi',   body: 'Hey, how's it going?'});

在您的NodeJS代码中,您可以使用Firebase Secret调用.auth()(这样您就可以读取和写入所有内容),然后执行以下操作:

ref.child('emails_to_send').on('child_added', function(emailSnap) {  var email = emailSnap.val();  sendEmailHelper(email.from, email.to, email.subject, email.body);  // Remove it now that we've processed it.  emailSnap.ref().remove();});

这将是最简单也是最正确的解决方案。例如,如果用户通过Firebase注销,他们将不再能够写入Firebase,因此他们将不再能够使NodeJS服务器发送电子邮件,这很可能是您想要的行为。这也意味着,如果您的服务器暂时关闭,则在启动它时,它将“赶上”发送电子邮件,一切将继续正常进行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号