当前位置: 首页 > 面试题库 >

在Firebase中使用NodeJ-安全性

轩辕风华
2023-03-14
问题内容

由于需要执行一些服务器端代码-主要是发送电子邮件,因此我决定将Nodejs&Express与Firebase一起用于服务器端元素以保存数据-
部分是出于学习经验。

我的问题是,在使用简单电子邮件和密码API进行身份验证时,使用客户端Firebase库和Nodejs库的最佳方法是什么?如果我执行身份验证客户端,然后随后在NodeJS端调用其他路由,则该用户的身份验证将在请求中进行。在Node中验证用户身份的测试方法是什么。

我假设的一种方法是从firebase获取当前用户的用户名和密码,然后将其发布到NodeJS,然后使用服务器上的firebase安全API进行测试。


问题答案:

从本质上讲,这里的问题是,您需要安全地向您的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服务器发送电子邮件,这很可能是您想要的行为。这也意味着,如果您的服务器暂时关闭,则在启动它时,它将“赶上”发送电子邮件,一切将继续正常进行。



 类似资料:
  • 主要内容:读和写,验证Firebase中的安全性是通过在安全规则中设置类似JSON的对象来处理的。 当我们点击侧面菜单中的数据库,然后点击标签栏中的规则时,可以找到安全规则。 在本章中,我们将通过几个简单的示例向您展示如何保护Firebase数据。 读和写 在Firebase安全规则中定义的以下代码片段将允许使用与访问的认证用户才能写入,但是其它人都可以读取。 示例 让我们考虑下面的例子。参考代码 - 验证 可以通过使

  • 所以我想知道,如果我将一个UUID作为后修复添加到文件路径(我现在这样做是为了唯一性,),它是否可以作为一种通过模糊来实现安全的方法呢?(这将是非常困难的野蛮猜测,使某种“私人”文件)。 我知道这不是很理想,但至少在Firebase为这种场景实现更好的解决方案之前,这是暂时的事情,并且能够在晚上睡得更好:p 我的想法是设置如下内容: null

  • 有没有一种方法可以只将数据传递给Firebase,以便在安全规则中进行检查,而实际上不将数据持久化到Firebase DB中?

  • 我正在使用我的网站中的firebase存储和帐户系统。这就是为什么,我必须放一些js代码(包括api键)。我能把这个密码藏起来吗。因为有人可以用这个api代码黑我的firebase(创建数十亿个帐户或添加数十亿个文件)。感谢你的帮助.

  • 我最近收到一封来自Firebase的电子邮件,告诉我我的数据库(FiRest)的规则不安全,所以我将它们更改为以下内容: 在我有这些规则之前: 在做出改变后,电子邮件不断地回来,我不知道还能做什么。我已经尝试了以下链接中给出的几个选项,但它们都不能满足我的需要。 https://firebase.google.com/docs/rules/insecure-rules#firestore 我需要授

  • 简单介绍一下,我正在尝试了解Firebase安全协议,我已经建立了一个名为UsersDB的数据库,该数据库将根据身份验证存储详细信息。uid。详细信息包括全名、电子邮件、提供商、帐户创建日期、上次登录日期。 我设置了如下规则: 我的理解是,记录只能由user_id符合auth.uid.的人读写 我的问题是我做得对吗?如果不对,我应该如何实现这一目标?我只希望创建帐户的人能够读写这个,而没有其他ui