这是一个奇怪的,但我不确定还有什么可以继续。我已成功为Node.js Express应用程序部署了passport-local策略,其中包含存储在MongoDB中的用户帐户。我通过MongoLab使用Mongo作为服务。
我的帐户和登录身份验证在本地按预期工作。但是,当我将我的应用程序部署到AWS(仍使用相同的Mongo服务)时,相同的帐户凭据将失败。我想知道...... Passport是否以某种方式使用URL,端口或其他特定于环境的信息来验证用户?也许在如何执行密码查找?
我已将其缩小到passport.authenticate('local')
中间件,但如果这个库以不同的方式在具有完全相同代码的不同环境中表现不同会让我感到惊讶。
我还应该提一下,我正在为我的用户模型使用passport-local-mongoose
插件。
答案 0 :(得分:0)
好的 - 我想出来了。
在我的本地系统上,我有一个较新版本的节点,但在我部署的版本上(在AWS ElasticBeanstalk上),它使用的是v0.10.36。
如果您查看passport-local-mongoose
的代码,您会看到:
var pbkdf2DigestSupport = semver.gte(process.version, '0.12.0');
...
var pbkdf2 = function(password, salt, callback) {
if (pbkdf2DigestSupport) {
crypto.pbkdf2(password, salt, options.iterations, options.keylen, options.digestAlgorithm, callback);
} else {
crypto.pbkdf2(password, salt, options.iterations, options.keylen, callback);
}
};
因此,如果两个不同版本的节点有一个高于0.12.0且低于一个节点,那么您将获得不同的加密功能。