2012-07-23 17 views
7

मैं वर्तमान में node.js में अपने प्रोजेक्ट के लिए प्रमाणीकरण मॉड्यूल बनाने की कोशिश कर रहा हूं?हैश उत्पन्न करने के लिए node.js में उपयोग करने के लिए Async या सिंक bcrypt फ़ंक्शन?

मैं पहले से ही, bcrypt का उपयोग कर हैश उत्पन्न करने के लिए के कुछ उदाहरण देखा है अर्थात

https://github.com/bnoguchi/mongoose-auth/blob/master/lib/modules/password/plugin.js https://github.com/Turbo87/locomotive-passport-boilerplate/blob/master/app/models/account.js

हालांकि, किसी कारण से वे bcrypt.hashSync() फ़ंक्शन का उपयोग कर रहे हैं।

User.virtual('password') 
.get(function() { 
    return this.hash; 
}) 
.set(function (password) { 
    bcrypt.hash('password', 10, function(err, hash) { 
     this.hash = hash; 
    }); 
}); 

आप कृपया मुझे समझा सकते हैं जो रास्ता बेहतर है और क्यों है: चूंकि bcrypt अच्छा है, क्योंकि यह समय लेने वाली है, है ना यह बजाय क्रम में कोड ब्लॉक नहीं करने के लिए अतुल्यकालिक समारोह का उपयोग करने के, यानी समझदार हो सकता है? धन्यवाद!

उत्तर

7

हां, यदि आप संभव हो तो एसिंक संस्करण का उपयोग करना चाहते हैं ताकि आप पासवर्ड हैश के दौरान अपना नोड प्रोसेसिंग नहीं कर रहे हों। आपके द्वारा संदर्भित दोनों स्रोत कोड मामलों में, कोड सिंक्रोनस संस्करण का उपयोग कर रहा है क्योंकि जिस विधि में इसका उपयोग किया जाता है वह सिंक्रोनस होता है, इसलिए लेखक के पास सिंक्रोनस संस्करण का उपयोग करने के अलावा कोई विकल्प नहीं था।

+3

+1, एसिंक निश्चित रूप से सही विकल्प है; मोंगोस जैसे ओडीएम का उपयोग करते समय ध्यान में रखना एक बात यह है कि गेटर्स और सेटर्स असीमित नहीं हो सकते हैं, इसलिए कुछ लेखक इसके बजाय सिंक्रोनस विधियों का उपयोग करेंगे। यह आम तौर पर गलत कदम है; अतीत में, मैंने एसिंक पासवर्ड सेट करने के लिए 'setPassword' जैसे मॉडल पर एक कस्टम विधि का उपयोग किया है। –

+0

@ ब्रैंडन टिली क्या आप अपनी कस्टम विधि का उदाहरण दे सकते हैं? –

+2

@lori ओह मैन, यह कुछ समय हो गया है क्योंकि मैंने इसे पोस्ट किया है, लेकिन ऐसा कुछ करीब लगता है: https://gist.github.com/BinaryMuse/7983335 –

2

आप एक सिंक्रोनस विधि के अंदर एसिंक कॉल नहीं कर सकते हैं। पासवर्ड सेट करते समय उपयोग करने के लिए एक अलग विधि बनाने का प्रयास करें।

मैंने अभी एक पुल अनुरोध सबमिट किया है, इसलिए किसी की परियोजना जो वास्तव में यह करती है। इसे यहां देखें: https://github.com/nickpoorman/CrowdNotes/commit/e268c80a9cacddbc0215bf0e2b7aa31c0a4c785f

संबंधित मुद्दे