2017-05-18 7 views
7

इस लिंक के अनुसार, https://laravel.com/docs/5.4/database-testing#writing-factories, डिफ़ॉल्ट लैरावेल उपयोगकर्ता कारखाना एक स्थिर $password चर के मूल्य का परीक्षण करता है। यदि यह गलत है, तो यह 'गुप्त' को स्वीकार करता है और इसका उपयोग करता है।डिफ़ॉल्ट लैरावेल उपयोगकर्ता कारखाने में स्थिर पासवर्ड कैसे काम करता है?

स्थिर वैरिएबल $password के मान को सेट करने के बारे में कोई कैसे जाता है? स्पष्ट रूप से मैं इसे आयात करने के समय आयात नहीं करना चाहता (क्योंकि इससे इसे परिवर्तनीय बनाने के उद्देश्य को हराया जाएगा)। मुझे एहसास है कि मैं make() विधि में सरणी पास करके पासवर्ड के मूल्य को ओवरराइड कर सकता हूं, लेकिन यह पूरी तरह से एक अलग बात है।

उत्तर

17

मैं ठीक उसी सवाल था और यहाँ जवाब मिला:

See the comment at the bottom

bcrypt() एक महंगी कॉल है, जो एक पासवर्ड हैशिंग एल्गोरिथ्म के रूप में अपनी लाभ का एक हिस्सा है। चूंकि नकली पासवर्ड उत्पन्न किया जा रहा है, इसलिए 'गुप्त' के लिए हार्डकोड किया गया है, हर बार पासवर्ड को bcrypt() करने की आवश्यकता नहीं है। एक स्थैतिक चर का उपयोग करके, हम पासवर्ड को एक बार bcrypt() कर सकते हैं, और उसके बाद कारखाने में प्रत्येक आगामी कॉल पर उसी हैश मान का उपयोग करें (उसी अनुरोध के भीतर)। तो, उदाहरण के लिए, कल्पना करें कि आप एक परीक्षण स्थापित कर रहे थे जिसके लिए 100 उपयोगकर्ताओं की आवश्यकता थी। $users = factory(User::class, 100)->create(); वह कोड कारखाने को 100 बार कॉल करेगा। स्थिर $ पासवर्ड चर के बिना, bcrypt() 100 बार चलाएगा, जिसमें कुछ सेकंड लग सकते हैं। स्थिर चर के साथ, bcrypt() अब केवल एक बार चलता है, और परिणाम सभी 100 उपयोगकर्ताओं के लिए उपयोग किया जाता है, जो आपके परीक्षण की गति को बहुत बढ़ा देता है।

तो स्थिर $ पासवर्ड बाहर से कुछ पासवर्ड शामिल नहीं है। यह प्रदर्शन हासिल करने के लिए सिर्फ एक चालाक चाल है।

+2

वाह, अच्छा काम। वह अस्पष्ट है। –

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