डिफ़ॉल्ट रूप से, auth_user
. में डालने पर पासवर्ड हैश हो जाते हैं तालिका (पासवर्ड फ़ील्ड से जुड़े फॉर्म सत्यापनकर्ता के माध्यम से)। इसलिए, आप टेबल में प्लेन टेक्स्ट पासवर्ड का एक मानक SQL इंसर्ट नहीं करना चाहते हैं (न केवल वह असुरक्षित है, बल्कि लॉगिन के बाद के प्रयास विफल हो जाएंगे क्योंकि Auth
हैशेड पासवर्ड की अपेक्षा कर रहा है)।
बल्क इंसर्ट करते समय हैशिंग करने का सबसे आसान तरीका है रिकॉर्ड्स को लूप करना और .validate_and_insert
का उपयोग करके हर एक को इन्सर्ट करना। तरीका। यह सभी फ़ील्ड सत्यापनकर्ताओं को चलाएगा (जिसके परिणामस्वरूप पासवर्ड हैश हो जाएंगे), और सत्यापन में विफल होने वाले किसी भी रिकॉर्ड को बस सम्मिलित नहीं किया जाएगा (इसलिए, उदाहरण के लिए, एक डुप्लिकेट उपयोगकर्ता नाम सम्मिलित नहीं किया जाएगा क्योंकि यह सत्यापन विफल हो जाएगा)।
for user in db(db.user).select():
db.auth_user.validate_and_insert(username=user.username, password=user.password)
हालांकि सत्यापन प्रक्रिया स्वचालित रूप से किसी भी डुप्लिकेट उपयोगकर्ता नाम को अस्वीकार कर देगी, यदि आप बहुत अधिक डुप्लिकेट की अपेक्षा करते हैं और दक्षता में सुधार करना चाहते हैं, तो आप पहले user
से केवल गैर-डुप्लिकेट का चयन कर सकते हैं। तालिका:
users = db(~db.user.username.belongs(db()._select(db.auth_user.username))).select()
for user in users:
db.auth_user.validate_and_insert(username=user.username, password=user.password)
साथ ही, ध्यान दें कि डिफ़ॉल्ट रूप से, auth_user
तालिका को first_name
में मानों की आवश्यकता होती है , last_name
, और email
फ़ील्ड (और कुछ Auth
. के लिए एक मान्य ईमेल पता आवश्यक है कार्यक्षमता, जैसे पासवर्ड रीसेट करना)। इसलिए, आपको या तो उन क्षेत्रों को भी भरने की योजना बनानी चाहिए, या अन्यथा उनकी requires
set सेट करनी चाहिए None
. के गुण इसलिए सत्यापन विफल नहीं होता है। उदाहरण के लिए:
db.auth_user.first_name.requires = None
एक अन्य विकल्प कस्टम auth_user
. को परिभाषित करना है टेबल।