Возможные улучшения для контактной формы - PullRequest
0 голосов
/ 12 мая 2019

Я следовал инструкциям. Построение контактной формы. И я добавил уведомление по электронной почте дополнительно. Мой окончательный код выглядит так:

...

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

 }
};


Все работает, как и ожидалось, но у меня не может быть данных для входа в smtp для nodemailer в app.js, лежащих в открытом коде. Это моя проблема.

Когда я использую этот код без указания имени пользователя, отправка формы завершается неудачно. Поэтому мне нужно либо написать дополнительно, если условие вызывает self.afterInsert, только если указан действительный логин.

Или я бы добавил логин process.env.USER_SMTP, process.env.USER_LOGIN и process.env.USER_PW в app.js, если это работает! Но мне все равно придется добавить электронную почту from: и to: в contact-form/index.js. Так что я действительно не знаю, как вежливо решить эту проблему, и я был бы признателен за предложение ...

1 Ответ

1 голос
/ 12 мая 2019

Я думаю, что вы испытываете некоторую путаницу в отношении безопасности размещения вещей в JavaScript.

Это код JavaScript на стороне сервера (node.js). Предположительно расположен здесь:

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

Это означает, что это так же безопасно, как и все на вашем частном сервере. Это не "публика". Никто не может видеть это, если у них нет доступа к вашей учетной записи сервера.

Если у них есть доступ к вашей учетной записи на сервере, они уже могут удалить всю вашу базу данных, превратить ваш сайт в спам-генератор и т. Д.

Так что я думаю, что вы можете спутать это с тем, что происходит, когда вы вводите учетные данные в JavaScript на стороне браузера. В ApostropheCMS это означало бы поместить их в папку public/js. Это небезопасно, но вы здесь этого не делаете.

Предполагая, что ваш код находится в частном репозитории - что и должно быть - это прекрасно, чтобы поместить эти учетные данные туда. Однако да, нет никаких причин, по которым вы не можете проверить process.env.USER_SMTP и так далее, если вы предпочитаете делать это таким образом. Например, если вы планируете создать общедоступный модуль npm для использования другими людьми в своих проектах, вы можете проверить такие переменные среды или просто попросить людей установить эти свойства в конфигурации уровня проекта.

Если это не проясняет вопрос, пожалуйста, предоставьте более подробную информацию о том, почему вы беспокоитесь о том, как эта информация выходит, и как.

...