2013-01-23 10 views
5

के लिए सुरक्षा विस्तार के साथ साइन अप पर दो बार दिखाता है मैं मजबूत पासवर्ड मान्य करने के लिए सुरक्षा विस्तार के साथ उपयोग कर रहा हूं।त्रुटि "मेल पहले से ही लिया जा चुका है" डेविस (आरओआर)

जब मैं पहले से लिया गया ईमेल वाला खाता पंजीकृत करने का प्रयास करता हूं, तो मुझे त्रुटि हैश में दो बार "ईमेल पहले ही लिया जा चुका है" त्रुटि मिलती है। सुरक्षा विस्तार (:secure_validatable की :validatable बजाय) के बिना

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    # :trackable deleted 
    devise :database_authenticatable, :registerable, :secure_validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :firstname, :lastname, :password, :password_confirmation, :remember_me 
end 

मैं त्रुटि केवल एक बार मिलती है:

मेरे उपयोगकर्ता मॉडल इस तरह दिखता है।

मैं क्या गलत कर रहा हूं?


पीएस बोनस प्रश्न:

मैं कुछ त्रुटियों को पहले स्थान पर कैसे उठा सकता हूं? क्या मुझे डिवीज के रजिस्ट्रेशन कंट्रोलर में हेरफेर करना है या इसके लिए कोई विकल्प है?

+0

क्या आपको कोई समाधान मिला है? –

+0

हाँ, मैंने सुरक्षा विस्तार गिरा दिया और अपना स्वयं का कस्टम पासवर्ड सत्यापन बनाया। – Conkerchen

+0

मेरा जवाब देखें। –

उत्तर

5

एक ही समस्या थी।

चेक अगर यह मदद करता है: https://groups.google.com/forum/?fromgroups=#!topic/plataformatec-devise/S0nxv7BK10M

+1

धन्यवाद! उन लोगों के लिए जो लिंक (उदाहरण के लिए चीन या ईरान में किसी भी व्यक्ति) पर नहीं जा सकते हैं, यदि आप वैध करने योग्य मॉड्यूल का उपयोग करते हैं, और फिर ईमेल फ़ील्ड में अपनी उपस्थिति सत्यापन जोड़ते हैं तो आपको यह समस्या दिखाई देगी। इसका मतलब यह होगा कि आपके पास दो ईमेल सत्यापन हैं। – stephenmurdoch

0

आप शायद यह भी है: validatable मॉड्यूल सक्रिय। यदि आप इसे डिवाइसेज सेटिंग्स में उल्लेख करते हैं, तो: secure_validatable उन मूल जांच (ईमेल: उपस्थिति, विशिष्टता और पासवर्ड: उपस्थिति) छोड़ देता है और यह केवल एक बार त्रुटि दिखाता है।

वसीयत: database_authenticatable,: registerable,: secure_validatable,: validatable

1

असली कारण है कि ऐसा होता है कि devise_security_extension ईमेल विशिष्टता सत्यापनकर्ता को परिभाषित करता है दो बार है।

पहली बार जब यह एक डिफ़ॉल्ट लॉगिन क्षेत्र के लिए एक विशिष्टता सत्यापनकर्ता परिभाषित करता है। दूसरी बार यह तब होता है जब यह ईमेल फ़ील्ड के लिए विशिष्टता सत्यापनकर्ता को परिभाषित करता है।

जब अपने डिफ़ॉल्ट लॉगिन क्षेत्र ईमेल, जो बहुत आम है है, सत्यापनकर्ता दो बार परिभाषित किया गया है।

मैंने निम्न कोड को प्रारंभिक फ़ाइल में डालकर इसे ठीक किया है। जब ईमेल आपकी लॉगिन विशेषता है तो यह अनावश्यक सत्यापनकर्ता को बनाए जाने से रोकता है।

module Devise 
    module Models 
    module SecureValidatable 
     module ClassMethods 
     private 

     def has_uniqueness_validation_of_login? 
      return true if login_attribute == :email 
      super 
     end 
     end 
    end 
    end 
end 
संबंधित मुद्दे

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