我可以使用Firebase云功能隐藏JavaScript代码吗?

时间:2017-10-15 05:59:08

标签: node.js firebase mqtt google-cloud-functions

我有一个JavaScript网页,可以将MQTT数据发送到运行Mosquitto的服务器。我想隐藏用户的MQTT服务器名称,用户名和密码。我知道使用纯JavaScript是不可能的,因为源在控制台中是可见的。

可以使用Firebase云功能吗?如果是的话怎么样?

2 个答案:

答案 0 :(得分:5)

这实际上是Cloud Functions for Firebase documentation中提到的关键功能之一:

  

保持您的逻辑私密且安全

     

在许多情况下,开发人员更喜欢控制服务器上的应用程序逻辑,以避免在客户端进行篡改。此外,有时不允许对代码进行逆向工程。云功能与客户完全隔离,因此您可以确保它是私有的,并且始终完全符合您的要求

Firebase的functions-samples repo中有相当多的示例。

例如,向用户发送电子邮件确认的示例需要gmail凭据才能发送电子邮件。您永远不会希望在应用程序代码中嵌入这些凭据,恶意用户可能会在其中找到并滥用这些凭据。因此,此代码是在云函数中运行的理想选择。此示例中的code that reads these values

// Configure the email transport using the default SMTP transport and a GMail account.
// For other types of transports such as Sendgrid see https://nodemailer.com/transports/
// TODO: Configure the `gmail.email` and `gmail.password` Google Cloud environment variables.
const gmailEmail = encodeURIComponent(functions.config().gmail.email);
const gmailPassword = encodeURIComponent(functions.config().gmail.password);
const mailTransport = nodemailer.createTransport(
    `smtps://${gmailEmail}:${gmailPassword}@smtp.gmail.com`);

您可以对电子邮件地址和密码进行硬编码,因为只有项目的开发人员才能看到它。但在这种情况下,示例会更好地执行此操作,并将凭据保留在使用functions.config()读取的服务器端配置中。要了解如何设置这些内容,请阅读documentation for the sample

  

gmail.emailgmail.password Google云环境变量设置为与用于发送电子邮件的Gmail帐户的电子邮件和密码相匹配(如果您的帐户启用了两步验证,则设置应用密码)。用于此用途:

firebase functions:config:set gmail.email="myusername@gmail.com" gmail.password="secretpassword"

答案 1 :(得分:0)

我认为甚至API密钥也可以安全地存储在firebase功能上。我已经在an articleGithub repo中提出了我的想法,以获取保存firebase配置变量并访问它们的详细方法。看看。