联系表格的可能改进

Possible Improvements for contact-form

我遵循了构建联系表的指南。我另外添加了电子邮件通知。我的最终代码如下所示:

...

 // Email default "from" address for this module
 email: { from: 'XXX@gmail.com' },

 afterConstruct: function(self) {
   self.setSubmitSchema();
 },

 construct: function(self, options) {

   // build submit shema
   self.setSubmitSchema = function() {
     self.submitSchema = self.apos.schemas.subset(self.schema,
       [ 'name', 'email', 'title', 'body' ]
     );
   };

   // Submit request to piece
   self.submit = function(req, callback) {
     var piece = {};
     return async.series([
       convert,
       insert
     ], callback);
     function convert(callback) {
       return self.apos.schemas.convert(req, self.schema, 'form', req.body, piece, callback);
     }
     function insert(callback) {
       return self.insert(req, piece, { permissions: false }, callback);
     }

   };

   // Submit request by email
   self.afterInsert = function(req, piece, options, callback) {
     return self.email(req, 'emailInserted', {
         piece: piece
       }, {
         // can also specify from and other
         // valid properties for nodemailer messages here
         to: 'XXX@gmail.com',
         subject: 'A new suggestion was received'
       },
       callback
     );
   };

 }
};


一切都按预期工作,但我无法在 public 代码中找到 app.js 中 nodemailer 的 smtp 登录数据。那是我的问题。

当我在没有提供登录表单的情况下使用此代码时,提交失败。因此,我需要编写额外的 if 条件来触发 self.afterInsert 仅当提供有效登录时。

或者如果可行,我会在 app.js 中添加 process.env.USER_SMTPprocess.env.USER_LOGINprocess.env.USER_PW 登录!但我仍然需要在 contact-form/index.js 中添加电子邮件 from:to:。所以我真的不知道解决这个问题的礼貌方法是什么,我会很感激一些建议...

我认为您对将东西放入 JavaScript 的安全性感到困惑。

这是 server-side (node.js) JavaScript 代码。大概位于此处:

/lib/modules/my-pieces-submit-widgets/index.js

这意味着它与您的私人服务器上的任何东西一样安全。它不是 "public." 除非他们可以访问您的服务器帐户,否则没有人可以看到它。

如果他们可以访问您的服务器帐户,他们就可以删除您的整个数据库,将您的网站变成垃圾邮件生成器等。

所以我认为您可能会将此与将凭据放入 browser-side JavaScript 时发生的情况混淆。在 ApostropheCMS 中,这意味着将它们放在 public/js 文件夹中。那是不安全的,但你不会在这里这样做。

假设您的代码位于私有存储库中 - 它应该是 - 将这些凭据放在那里是完全没问题的。但是,是的,如果您喜欢这样做,没有理由不能检查 process.env.USER_SMTP 等等。例如,如果您计划创建一个 public npm 模块供其他人在他们的项目中使用,您可能会检查此类环境变量,或者您可能只是告诉人们在项目级别配置中设置这些属性。

如果这不能解决问题,请提供更多细节,说明您担心此信息泄露的原因以及方式。