Ошибка при получении петли - Значительное изменение в функции User validatePassword в том же выпуске (3.0.0) - PullRequest
0 голосов
/ 04 июня 2018

Я использую loopback 3.0.0, и я недавно установил новый сервер, около недели назад.Для этого я запустил команду npm install, поместив файл package.son.

Но в этих установленных файлах модуль node_modules / loopback / common / user.js изменился с серьезными изменениями.

Яйца:

Старый файл:

// Copyright IBM Corp. 2014,2016. All Rights Reserved.
  User.validatePassword = function(plain) {
    var err;
    if (plain && typeof plain === 'string' && plain.length <= MAX_PASSWORD_LENGTH) {
      return true;
    }
    if (plain.length > MAX_PASSWORD_LENGTH) {
      err = new Error(g.f('Password too long: %s', plain));
      err.code = 'PASSWORD_TOO_LONG';
    } else {
      err =  new Error(g.f('Invalid password: %s', plain));
      err.code = 'INVALID_PASSWORD';
    }
    err.statusCode = 422;
    throw err;
  };

Новый файл:

// Copyright IBM Corp. 2014,2018. All Rights Reserved.
User.validatePassword = function(plain) {
        var err;
        if (!plain || typeof plain !== 'string') {
          err = new Error(g.f('Invalid password.'));
          err.code = 'INVALID_PASSWORD';
          err.statusCode = 422;
          throw err;
        }

        // Bcrypt only supports up to 72 bytes; the rest is silently dropped.
        var len = Buffer.byteLength(plain, 'utf8');
        if (len > MAX_PASSWORD_LENGTH) {
          err = new Error(g.f('The password entered was too long. Max length is %d (entered %d)',
            MAX_PASSWORD_LENGTH, len));
          err.code = 'PASSWORD_TOO_LONG';
          err.statusCode = 422;
          throw err;
        }
      };

Я разработал свой код с той же версией, но со старойкод, который они предоставили в той же версии (3.0.0.).Здесь вы можете видеть, что в новом коде нет оператора return , поэтому код бесконечно ждет возврата и истекает время ожидания.В обоих местах файл package.json содержит одну и ту же версию: "loopback": "^3.0.0"

Я надеюсь, что не рекомендуется копировать node_modules с нашего сервера разработки на рабочий сервер.

Так как мы можем справиться с такими проблемами?

1 Ответ

0 голосов
/ 05 июня 2018

При указании номера версии в package.json есть несколько разных способов https://docs.npmjs.com/files/package.json#dependencies:

По умолчанию используется ^, что означает

совместим с версией

Так что ^ 3.0.0 установит 3.0.0 только в том случае, если это последняя минорная версия и исправлены версии , в противном случае она будет работать независимо от того, включена ли последняя версия loopback.этот день.Сегодня это 3.19.3.

Проблема была введена в версии v3.10.1 (спасибо @vasan), поэтому локально, возможно, у вас была версия 3.10.0, а затем на сервере у вас было 3.10.1

* 1020.* В этом вопросе есть хорошее объяснение номеров версий В чем разница между тильдой (~) и кареткой (^) в package.json?

Я бы предложил использовать точную версиют. е. 3.19.3 и затем использование службы, такой как rennovate, https://github.com/renovate-bot, для обновления вашего проекта, чтобы быть в курсе обновлений с помощью исправлений безопасности

Существует также другая защита от этого, package-lock.json https://docs.npmjs.com/files/package-lock.json введено в версии 5 npm.Если вы проверите этот файл в нем, убедитесь, что везде, где вы запускаете npm install, точная версия модуля npm установлена ​​там, где вы его запускаете.

...