2011-06-12 15 views
6

मैं रेल ऐप में प्रमाणीकरण के लिए तैयार हूं, और मेरे ऐप में कई सबडोमेन हो सकते हैं। वर्तमान में यह प्रमाणीकरण के रूप में ईमेल का उपयोग कर रहा है, और पूरे ऐप के लिए ईमेल अद्वितीय होना चाहिए।डेविस रेल में सबडोमेन को ईमेल स्कॉइंग

अब क्या कोई तरीका है कि मैं सबडोमेन को ईमेल पते की विशिष्टता का दायरा कर सकता हूं, पूरे ऐप नहीं? मैंने कोशिश की:

validates_uniqueness_of :email, :scope => :account_id 

लेकिन काम नहीं किया। यह अभी भी पूरे ऐप को ईमेल की विशिष्टता की तलाश करता है, न कि नए उपयोगकर्ता को पंजीकृत करते समय विशिष्ट सबडोमेन नहीं।

किसी भी मदद की अत्यधिक सराहना की जाएगी।

+0

उपयोगकर्ता तालिका में संग्रहीत सबडोमेन नाम कहां है? – Dogbert

+0

मेरे पास खाता मॉडल है जो सबडोमेन नाम संग्रहीत करता है। और खाते में उपयोगकर्ता मॉडल के साथ कई संबंध हैं। और मैंने अपने उपयोगकर्ता मॉडल में उल्लिखित मान्यताओं_uniqueness_of की कोशिश की लेकिन व्यर्थ में .. :( – kxhitiz

+0

क्या आप उनके बीच के संबंधों (has_many, belong_to) के साथ मॉडल (खाता, उपयोगकर्ता) के मूलभूत तत्व को जोड़ सकते हैं और उनके द्वारा संग्रहीत प्रासंगिक विशेषताओं को जोड़ सकते हैं? – Dogbert

उत्तर

7

ठीक है मैंने इस तरह से किया। के रूप में

config.authentication_keys = [ :login, :account_id ] 

devise.rb में
संपादित config.authentication_keys इसके अलावा, मैं लॉगिन रूप में ACCOUNT_ID

<%= f.hidden_field :account_id, :value => @account.id %> 

यहाँ शामिल करने के लिए वर्तमान उप डोमेन से संबंधित खाते में पकड़ @account छिपी हुई फ़ील्ड बनाया।

और user.rb में निम्नलिखित संरक्षित विधि जोड़ा find_for_database_authentication वर्ग विधि ओवरराइड करने के लिए

protected 
def self.find_for_database_authentication(warden_conditions) 
conditions = warden_conditions.dup 
login = conditions.delete(:login) 
account_id = conditions.delete(:account_id) 
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).where("account_id = ?", account_id).first 
end 

यदि वहाँ बेहतर समाधान तो लोग बेझिझक टिप्पणी ..
चीयर्स!

+0

क्या सबडोमेन से खोजने के लिए खाता_आईडी होने के बजाय, एक तरीका है? बड़े अनुप्रयोगों के लिए, खाता आईडी का पर्दाफाश करना आरामदायक नहीं है : - \ – NullVoxPopuli

+0

पुष्टिकरण इस समाधान के साथ काम नहीं कर रहा है। –

+0

खाता_आईडी द्वारा स्कॉप्ड किए गए उपयोगकर्ता ईमेल के साथ पुष्टिकरण कार्य कैसे करें? –

0

आप अपने उपयोगकर्ताओं को कैसे सहेज रहे हैं, क्या आप इसे सहेजने से पहले उपयोगकर्ता मॉडल पर खाता सेट कर रहे हैं? यदि नहीं तो आप शून्य के खाता_आईडी पर जा रहे होंगे - इसलिए ऐसा लगता है कि कोई गुंजाइश नहीं है।

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