我遵循了建立联系表的指南。而且我还添加了电子邮件通知。我的最终代码如下:
...
// 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_SMTP
,process.env.USER_LOGIN
和process.env.USER_PW
添加登录,如果可以的话!但是我仍然必须在from:
中添加电子邮件to:
和contact-form/index.js
。所以我真的不知道什么是礼貌的方式来解决这个问题,我很乐意提出一些建议...
答案 0 :(得分:1)
我认为您对将内容放入JavaScript的安全性感到有些困惑。
这是服务器端(node.js)JavaScript代码。大概在这里:
/lib/modules/my-pieces-submit-widgets/index.js
这意味着它与您的私有服务器上的任何东西一样安全。它不是“公共”。除非他们有权访问您的服务器帐户,否则没人能看到它。
如果他们有权访问您的服务器帐户,他们已经可以删除整个数据库,将您的网站变成垃圾邮件生成器,等等。
因此,我认为您可能会将其与在浏览器端JavaScript中放置凭据时发生的情况混淆。在ApostropheCMS中,这意味着将它们放在public/js
文件夹中。那是不安全的,但是您不在这里做。
假设您的代码位于一个专用存储库中(应该是这样),那么将这些凭据放在此处就可以了。但是,是的,没有理由您无法检查process.env.USER_SMTP
,如果您愿意这样做,则依此类推。例如,如果您打算创建一个公共npm模块供其他人在他们的项目中使用,则可以检查此类环境变量,或者可以告诉其他人在项目级配置中设置这些属性。
如果仍不能解决问题,请提供更多详细信息,说明您为何担心此信息泄露以及如何担心。