我有一个JavaScript网页,它将MQTT数据发送到运行Mosquitto的服务器。我想向用户隐藏MQTT服务器名称、用户名和密码。我知道使用纯JavaScript是不可能的,因为源代码在控制台中是可见的。
是否可以使用Firebase云功能?如果是,怎么做?
这实际上是Firebase文档的云功能中提到的关键功能之一:
保持您的逻辑私有且安全
在许多情况下,开发人员更喜欢控制服务器上的应用程序逻辑,以避免在客户端进行篡改。此外,有时不希望允许对代码进行逆向工程。云功能与客户端完全隔离,因此您可以确保它是私有的,并且总是按照您的意愿进行
Firebase的函数samples repo中有相当多的示例。
例如,向用户发送电子邮件确认的示例需要发送电子邮件的gmail凭据。您永远不会希望将这些凭据嵌入到应用程序代码中,恶意用户很可能会发现并滥用它们。因此,这段代码非常适合在Cloud Functions中运行。从这个样本中读取这些值的代码:
// 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()
读取。要了解如何设置这些,请阅读示例的文档:
设置
gmail.email
和gmail.password
谷歌云环境变量,以匹配用于发送电子邮件的Gmail帐户的电子邮件和密码(如果您的帐户启用了两步验证,则为应用程序密码)。用于此用途:firebase functions:config:set gmail.email="myusername@gmail.com" gmail.password="secretpassword"
我认为即使是API密钥也可以通过firebase函数安全地存储。我在一篇文章和Github repo中表达了我的想法,以了解保存firebase配置变量并访问它们的详细方法。看一看