2017-02-16 2 views
5

समय-समय पर, मुझे लगता है कि उपयोगकर्ता ईमेल डुप्लिकेट किए गए हैं। विशिष्टता की जांच के लिए मॉडल सत्यापन (ऐप स्तर) के साथ भी। मुझे संदेह है कि यह समवर्ती चिंताओं से संबंधित है।ईमेल को संग्रहीत करने वाले किसी भी मुद्दे को डाउन-कैस के रूप में?

मैंने इसे संबोधित करने के लिए डीबी स्तर पर एक सूचकांक जोड़ने का निर्णय लिया है।

निचला सूचकांक शायद वैसे भी समझदार है।

भले ही हम गारंटी दे रहे हैं कि आवेदन स्तर पर ईमेल कम हो गए हैं। डेटाबेस स्थिरता की एक मजबूत गारंटी प्रदान करता है।

इससे कोई फर्क नहीं पड़ता, लेकिन डीबी को लागू करने से यह भी चोट नहीं पहुंचा सकता है।

मैं उन बाधाओं को अधिकतम करने के लिए बहुत से अतिरिक्त सुरक्षा उपायों को डाल सकता हूं जिनके पास कभी भी अपरकेस वर्ण नहीं है, लेकिन ऐप अभी भी अन्य स्रोतों से डीबी में जाने वाले डेटा के लिए नियंत्रण नहीं कर सकता है, और वह कोड डेवलपर त्रुटि, रखरखाव लागत, आदि की संभावना है

class CreateUniqueIndexForUserEmails < ActiveRecord::Migration 
    def up 
    remove_index :users, :email 

    execute <<-SQL 
     CREATE UNIQUE INDEX index_users_on_lower_email ON users (LOWER(email)); 
    SQL 
    end 

    def down 
    execute <<-SQL 
     DROP INDEX index_users_on_lower_email; 
    SQL 

    add_index :users, :email 
    end 
end 

मैं भी user मॉडल में कोड के इस खंड के साथ इस तर्क मिलकर किया है:

def email=(value) 
    write_attribute :email, value.downcase 
end 

जो सुनिश्चित करता है [email protected] के रूप में फिर से लिखा जाता है [email protected] (ऐप स्तर पर)।

मैंने मुख्य रूप से Are email addresses case sensitive? पर पॉइंटर्स से आरएफसी ऑनलाइन पढ़ा है जो संकेत देता है कि कुछ ईमेल सर्वर केस संवेदनशीलता की परवाह करते हैं।

अभी भी, जब मैं आज ईमेल भेजता हूं। मैं शायद ही कभी आवरण में ध्यान नहीं लेता। असल में, मैं ईमेल को नीचे-नीचे के रूप में टाइप करता हूं। ईमेल अभी भी वितरित हो जाता है।

क्या आरएफसी कुछ पर विचार करना है? यानी यदि उपयोगकर्ता [email protected] इनपुट करता है, तो ऐप [email protected] के रूप में ईमेल पंजीकृत करता है। क्या इसका ईमेल "वितरण योग्यता" पर कोई असर होगा?

यदि नहीं, तो मुझे अन्य चिंताओं को ध्यान में रखना चाहिए?

+0

कोई वास्तविक उत्तर नहीं, केवल एक हैक सुझाव: "सामान्य" ईमेल (जैसे 'normalized_email') को संग्रहीत करने के लिए अलग कॉलम क्यों नहीं है, जो अद्वितीय भी होना चाहिए? मेरा मतलब है, दुर्लभ मामलों में जब मामला वास्तव में मायने रखता है और अन्य उपयोगकर्ता समान ईमेल वाले दो उपयोगकर्ता होते हैं, तो आप या तो उनमें से किसी एक को अन्य ईमेल का उपयोग करने या इसे किसी अन्य तरीके से संभालने के लिए कह सकते हैं। –

+0

दूसरा कॉलम होने का एक सुझाव है जिसे मैंने भी माना है। लेकिन इस विचार से पहले, मैं जानना चाहता हूं कि निचले-आवरण ईमेल के बारे में प्रस्ताव एक अनुशंसित दृष्टिकोण है या नहीं –

उत्तर

1

डेविस ईमेल विशेषता पर डाउनकेस लागू करता है, इसलिए मुझे लगता है कि यह कोई मुद्दा नहीं है।

देखें: https://github.com/plataformatec/devise/blob/f7b6d786066cef2f5e8d2ce9c6b6cc83918580eb/test/models/database_authenticatable_test.rb#L17

परिवर्तनों पर विचार करने के लिए वसीयत परीक्षण फ़ाइल में अन्य दावे देखें।

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

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