TypeError:“摘要”参数是必需的,不能是未定义的

我通过http:// localhost:3000 / auth / register注册一个简单的Mean Application时遇到了主题错误,我只是使用mean init命令创build的。 pbkdf2crypto正在产生的错误,我不知道在哪里寻找它。

我做了很多不同的事情,如清除npmcaching,重新安装使用npm等,请帮助我。 以下是一些更多的信息。

 Mean --version: 0.12.15 npm --version: 5.0.3 node --version: v8.1.0 bower --version: 1.8.0 gulp --version: CLI and Local: 3.9.1 

代码为model.UserSchema.methods.hashPassword (D:\ Projects \ Mean \ CampaignBuilder \ node_modules \ meanio-users \ server \ models \ user.js)

 /** * Hash password * * @param {String} password * @return {String} * @api public */ UserSchema.methods.hashPassword = function(password) { if (!password || !this.salt) return ''; var salt = new Buffer(this.salt, 'base64'); return crypto.pbkdf2Sync(password, salt, 10000, 64).toString('base64'); }; 

注册页面调用http:// localhost:3000 / api / register ,它会生成500 Internal Server Error

Firefox正在显示以下响应:

 TypeError: The "digest" argument is required and must not be undefined at pbkdf2 (crypto.js:635:11) at Object.exports.pbkdf2Sync (crypto.js:628:10) at model.UserSchema.methods.hashPassword (D:\Projects\Mean\CampaignBuilder\node_modules\meanio-users\server\models\user.js:165:17) at model.<anonymous> (D:\Projects\Mean\CampaignBuilder\node_modules\meanio-users\server\models\user.js:94:31) at VirtualType.applySetters (D:\Projects\Mean\CampaignBuilder\node_modules\mongoose\lib\virtualtype.js:94:25) at model.Document.set (D:\Projects\Mean\CampaignBuilder\node_modules\mongoose\lib\document.js:656:12) at model._handleIndex (D:\Projects\Mean\CampaignBuilder\node_modules\mongoose\lib\document.js:587:14) at model.Document.set (D:\Projects\Mean\CampaignBuilder\node_modules\mongoose\lib\document.js:547:24) at model.Document (D:\Projects\Mean\CampaignBuilder\node_modules\mongoose\lib\document.js:71:12) at model.Model (D:\Projects\Mean\CampaignBuilder\node_modules\mongoose\lib\model.js:46:12) at new model (D:\Projects\Mean\CampaignBuilder\node_modules\mongoose\lib\model.js:3621:13) at create (D:\Projects\Mean\CampaignBuilder\node_modules\meanio-users\server\controllers\users.js:86:24) at Layer.handle [as handle_request] (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\layer.js:95:5) at next (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\layer.js:95:5) at D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\index.js:281:22 at Function.process_params (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\index.js:335:12) at next (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\index.js:275:10) at loadUser (D:\Projects\Mean\CampaignBuilder\node_modules\meanio-users\server\controllers\users.js:202:24) at Layer.handle [as handle_request] (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\index.js:317:13) at D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\index.js:284:7 at Function.process_params (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\index.js:335:12) at next (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\index.js:275:10) at D:\Projects\Mean\CampaignBuilder\node_modules\connect-modrewrite\index.js:129:7 at Layer.handle [as handle_request] (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (D:\Projects\Mean\CampaignBuilder\node_modules\meanio\lib\core_modules\server\node_modules\express\lib\router\index.js:317:13) 

根据crypto.pbkdf2Sync方法,你缺less最后一个摘要的参数,因此显示的错误。

https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest

另外,通过进一步调查,您可以看到在节点v 6.0中需要摘要参数。

以前的默认似乎是'sha1'。

这也可能是由于节点版本错误/运行的版本具有在您有活动的节点版本中不支持的调用

我的经验:我的团队有一个需要Node 6.10.0的应用程序。 有时我忘记切换到这个版本的节点,并运行8.6.0下的最新代码,并收到相同的错误。 只要我换回到6.10.0的网站将允许我login。

(我可以看到,接受的答案也提到了这一点,但我想添加一个更明显的答案,以防止有人在那里!)