联系表格的可能改进
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_SMTP
、process.env.USER_LOGIN
和 process.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 模块供其他人在他们的项目中使用,您可能会检查此类环境变量,或者您可能只是告诉人们在项目级别配置中设置这些属性。
如果这不能解决问题,请提供更多细节,说明您担心此信息泄露的原因以及方式。
我遵循了构建联系表的指南。我另外添加了电子邮件通知。我的最终代码如下所示:
...
// 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_SMTP
、process.env.USER_LOGIN
和 process.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 模块供其他人在他们的项目中使用,您可能会检查此类环境变量,或者您可能只是告诉人们在项目级别配置中设置这些属性。
如果这不能解决问题,请提供更多细节,说明您担心此信息泄露的原因以及方式。