环回出现错误 - 同一版本本身 (3.0.0) 中用户验证密码功能的重大变化
Loopback getting error - Major change in User validatePassword function in the same release itself (3.0.0)
我正在使用 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 语句,因此代码无限等待 return 并超时。在这两个地方,package.json 文件包含相同的版本:"loopback": "^3.0.0"
我希望不要将 node_modules 从我们的开发服务器复制到生产服务器。
那么我们该如何处理这类问题呢?
在 package.json 中指定版本号时有几种不同的方法 https://docs.npmjs.com/files/package.json#dependencies:
你的方式是默认的,^
这意味着
compatible with version
所以 ^3.0.0 将只安装 3.0.0 如果它是最新的次要版本和修复版本,否则它将采用当天最新版本的 loopback。今天是 3.19.3
.
这个问题是在版本 v3.10.1
中引入的(感谢@vasan)所以本地可能你有版本 3.10.0
然后在服务器上你有 3.10.1
这个问题对版本号有很好的解释What's the difference between tilde(~) and caret(^) in package.json?
我建议使用一个准确的版本,即 3.19.3
然后使用像 rennovate 这样的服务,https://github.com/renovate-bot,更新您的项目以保持最新的安全补丁
这里还有一个防范措施,package-lock.json https://docs.npmjs.com/files/package-lock.json在npm 5版本中引入。如果你检查这个文件,它会确保你 运行 npm install
无论你在哪里 运行 安装 npm 模块的确切版本。
我正在使用 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 语句,因此代码无限等待 return 并超时。在这两个地方,package.json 文件包含相同的版本:"loopback": "^3.0.0"
我希望不要将 node_modules 从我们的开发服务器复制到生产服务器。
那么我们该如何处理这类问题呢?
在 package.json 中指定版本号时有几种不同的方法 https://docs.npmjs.com/files/package.json#dependencies:
你的方式是默认的,^
这意味着
compatible with version
所以 ^3.0.0 将只安装 3.0.0 如果它是最新的次要版本和修复版本,否则它将采用当天最新版本的 loopback。今天是 3.19.3
.
这个问题是在版本 v3.10.1
中引入的(感谢@vasan)所以本地可能你有版本 3.10.0
然后在服务器上你有 3.10.1
这个问题对版本号有很好的解释What's the difference between tilde(~) and caret(^) in package.json?
我建议使用一个准确的版本,即 3.19.3
然后使用像 rennovate 这样的服务,https://github.com/renovate-bot,更新您的项目以保持最新的安全补丁
这里还有一个防范措施,package-lock.json https://docs.npmjs.com/files/package-lock.json在npm 5版本中引入。如果你检查这个文件,它会确保你 运行 npm install
无论你在哪里 运行 安装 npm 模块的确切版本。