Что на самом деле делает моя функция serverSessionSecrect ()? - PullRequest
0 голосов
/ 11 июня 2019

Я настраиваю новое приложение и использую некоторый шаблонный код для управления сеансами и шифрования паролей.Есть одна конкретная функция, которую я просто не могу понять.

Я пытался следовать коду, но все еще не могу определить, что происходит.

const serverSessionSecret = () => {
  if (!process.env.SERVER_SESSION_SECRET ||
      process.env.SERVER_SESSION_SECRET.length < 8 ||
      process.env.SERVER_SESSION_SECRET === warnings.exampleBadSecret) {
    // Warning if user doesn't have a good secret
    console.log(warnings.badSecret);
  }

  return process.env.SERVER_SESSION_SECRET;
};

module.exports = cookieSession({
  secret: serverSessionSecret() || 'secret', // please set this in your .env file
  key: 'user', // this is the name of the req.variable. 'user' is convention, but not required
  resave: 'false',
  saveUninitialized: false,
  cookie: { maxage: 60000, secure: false },
});

Функция ссылается на файл .env, который я не создал.Это объясняет, почему я всегда получаю «Bad Secret» console.log.Похоже, что функция serverSessionSecret только проверяет, соответствует ли process.env.SERVER_SESSION_SECRET минимальным требованиям безопасности, но какова цель этого.

Какая разница, если у меня есть .env или нет?

1 Ответ

0 голосов
/ 11 июня 2019

process.env - это способ доступа к переменным среды, в которых выполняется скрипт.

Это позволяет вам вводить различные переменные в ваш код в зависимости от того, где он запускается.Переменные среды могут быть либо экспортированы туда, где выполняется код (например, export newEnv = NewEnvVar), либо существовать в файле .env.

Просмотр комментариев для каждой строки:

const serverSessionSecret = () => {
  if (!process.env.SERVER_SESSION_SECRET || 
         // Send warning if SERVER_SESSION_SECRET does NOT exit? Or...
      process.env.SERVER_SESSION_SECRET.length < 8 ||
         // Send warning if it less than 8 characters. Or...
      process.env.SERVER_SESSION_SECRET === warnings.exampleBadSecret
         // Send warning if the secret matches a predefined bad example
  ) {
    // Warning if user doesn't have a good secret
    console.log(warnings.badSecret);
  }

     /* If none of the above conditions are met,
     *   a console.log warning message does not get sent.
     */

  return process.env.SERVER_SESSION_SECRET;
     // This returns the Secret or Undefined if it does not exist.
};

Тогда в ваших экспортах:

module.exports = cookieSession({
  secret: serverSessionSecret() || 'secret', // please set this in your .env file
     // secret will equal your 'process.env.SERVER_SESSION_SECRET' environment
     // variable, but if it is not defined, it will equal 'secret'
  key: 'user', // this is the name of the req.variable. 'user' is convention, but not required
  resave: 'false',
  saveUninitialized: false,
  cookie: { maxage: 60000, secure: false },
});

Подводя итог, serverSessionSecret() возвращает только строку в этом случае.Либо secret, либо то, что установлено в переменных среды.

Похоже, вы используете эту библиотеку: https://www.npmjs.com/package/cookie-session

В этом случае, когда вы настраиваете сеанс cookie с помощьюsecret, их документация показывает:

secret

Строка, которая будет использоваться как один ключ, если ключи не предоставлены.

keys

Список ключей, используемых для подписи и проверки значений файлов cookie.Установленные куки всегда подписываются ключами [0], в то время как другие ключи действительны для проверки, что позволяет вращать ключи.

В вашем случае process.env.SERVER_SESSION_SECRET или secret используется для подписи& verfiy the cookie.

...