2017-06-17 19 views
7

Tôi gặp lỗi chủ đề khi đăng ký Ứng dụng trung bình đơn giản qua http://localhost:3000/auth/register, mà tôi vừa tạo bằng lệnh mean init. pbkdf2 hoặc crypto đang tạo ra lỗi và tôi không biết nên tìm ở đâu.LoạiError: Đối số "tiêu hóa" là bắt buộc và không được xác định

Tôi đã thực hiện rất nhiều thứ khác nhau như bộ nhớ cache npm đã xóa, được cài đặt lại bằng cách sử dụng npm, v.v. Hãy giúp tôi. Sau đây là một số thông tin khác.

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 

Mã cho model.UserSchema.methods.hashPassword (D: \ Projects \ Mean \ CampaignBuilder \ node_modules \ meanio-users \ server \ mô hình \ 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'); 
}; 

trang Đăng ký gọi http://localhost:3000/api/register và nó tạo ra 500 Internal Server Error.

Firefox đang hiển thị phản ứng sau đây:

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) 
+0

Xin vui lòng gửi mã cho model.UserSchema.methods.hashPassword (D: \ Projects \ Mean \ CampaignBuilder \ node_modules \ meanio-users \ server \ models \ user.js: 165: 17) – Shadowfool

+0

Như tôi đã nói, tôi đã tạo ứng dụng bằng init có nghĩa là, vì vậy nó là ứng dụng MEAN mặc định. Tuy nhiên, mã được thêm vào cho model.UserSchema.methods.hashPassword để dễ tham khảo. –

Trả lời

19

mỗi phương pháp crypto.pbkdf2Sync bạn đang thiếu đối số cuối cùng mà là digest, do đó các lỗi được hiển thị.

crypto.pbkdf2

Ngoài ra với điều tra thêm, bạn có thể thấy rằng lập luận tiêu hóa được yêu cầu trong Node v6.0.

Mặc định trước đó có vẻ là 'sha1'.

+0

Bạn có thể vui lòng hướng dẫn những gì tôi nên sử dụng cho nó? Tôi có nghĩa là tôi nên sử dụng 'sha512' hoặc 'md5' hoặc bất cứ điều gì tôi muốn? Hoặc tôi có cần kiểm tra một số địa điểm hoặc cấu hình khác của ứng dụng MEAN trước khi chọn bất kỳ thứ gì không? hoặc chỉ mã hóa cứng 'sha512' sẽ là đủ? –

+0

Cảm ơn rất nhiều. Đó là làm việc với 'sha512' (Đăng nhập/Đăng ký cả hai). Vì vậy, tôi cho rằng giải mã cũng sẽ hoạt động. Tôi mới với MEAN, NodeJS và tất cả những thứ này và điều này khiến tôi phát điên vì tôi không biết gì cả. –

+0

Vui vì tôi có thể giúp đỡ, tài liệu/đọc thông qua theo dõi ngăn xếp luôn là một khởi đầu tuyệt vời để cố gắng gỡ lỗi. Bạn sẽ nhận được hang của nó trong thời gian không. Vâng, nếu bạn có thể đăng nhập thì bạn ổn. – Shadowfool

2

này cũng có thể được gây ra bởi phiên bản sai của nút/chạy một phiên bản mà có cuộc gọi mà không được hỗ trợ trong phiên bản của nút mà bạn có hoạt động

Kinh nghiệm của tôi: Đội của tôi có một ứng dụng mà đòi hỏi Node 6.10.0. Đôi khi tôi quên chuyển sang phiên bản này của nút và chạy mã mới nhất dưới 8.6.0 và tôi nhận được cùng một lỗi. Ngay sau khi tôi đổi lại thành 6.10.0, trang web sẽ cho phép tôi đăng nhập.

(Tôi có thể thấy rằng câu trả lời chấp nhận cũng đề cập đến điều này, nhưng tôi muốn thêm một câu trả lời rõ ràng hơn trong trường hợp nó giúp ai đó ngoài kia!)

Các vấn đề liên quan