联系表格的可能改进

时间:2019-05-12 14:11:28

标签: apostrophe-cms

我遵循了建立联系表的指南。而且我还添加了电子邮件通知。我的最终代码如下:

...

 // 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
     );
   };

 }
};


一切正常,但我无法在公共代码中放置app.js中的nodemailer的smtp登录数据。那是我的问题。

当我使用此代码而没有耗材登录表单提交失败。因此,只有在提供有效登录后,我才需要编写其他if条件来触发self.afterInsert

或者我可以在app.js中通过process.env.USER_SMTPprocess.env.USER_LOGINprocess.env.USER_PW添加登录,如果可以的话!但是我仍然必须在from:中添加电子邮件to:contact-form/index.js。所以我真的不知道什么是礼貌的方式来解决这个问题,我很乐意提出一些建议...

1 个答案:

答案 0 :(得分:1)

我认为您对将内容放入JavaScript的安全性感到有些困惑。

这是服务器端(node.js)JavaScript代码。大概在这里:

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

这意味着它与您的私有服务器上的任何东西一样安全。它不是“公共”。除非他们有权访问您的服务器帐户,否则没人能看到它。

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

因此,我认为您可能会将其与在浏览器端JavaScript中放置凭据时发生的情况混淆。在ApostropheCMS中,这意味着将它们放在public/js文件夹中。那是不安全的,但是您不在这里做。

假设您的代码位于一个专用存储库中(应该是这样),那么将这些凭据放在此处就可以了。但是,是的,没有理由您无法检查process.env.USER_SMTP,如果您愿意这样做,则依此类推。例如,如果您打算创建一个公共npm模块供其他人在他们的项目中使用,则可以检查此类环境变量,或者可以告诉其他人在项目级配置中设置这些属性。

如果仍不能解决问题,请提供更多详细信息,说明您为何担心此信息泄露以及如何担心。