2009-08-26 14 views
14

तो मैं Authlogic इस user_sessions/new दृश्य के साथ ठीक काम कर रहा है:लॉगिन फार्म पर ईमेल पता फ़ील्ड नहीं डाल सकते हैं (Authlogic)

<% form_for @user_session, :url => user_session_path do |f| %> 

    <% if @user_session.errors.present? %> 
    Invalid username or password 
    <% end %> 

    <%= f.label :login %><br /> 
    <%= f.text_field :login %><br /> 
    <br /> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %><br /> 
    <br /> 
    <%= f.check_box :remember_me, :style => 'margin-right: 10px' %> 
    <%= f.label :remember_me %><br /> 
    <br /> 
    <%= f.submit "Login" %> 
<% end %> 

लेकिन जब मैं बदल

<%= f.label :login %><br /> 
    <%= f.text_field :login %><br /> 

को

<%= f.label :email %><br /> 
    <%= f.text_field :email %><br /> 

मुझे यह त्रुटि मिलती है जब मैं दृश्य लोड करता हूं:

undefined method `email' for #<UserSession: no credentials provided> 

लेकिन निश्चित रूप से मेरे उन तालिका एक email क्षेत्र है, आदि

उत्तर

31

आप इस बारे में गलत तरीके से जा रहे हैं:

प्रयास करें:

class UserSession < Authlogic::Session::Base 
    find_by_login_method :find_by_login_or_email 
end 

और user.rb में

def self.find_by_login_or_email(login) 
    find_by_login(login) || find_by_email(login) 
end 

आपका UserSession ईमेल की कोई अवधारणा नहीं है (यह सिर्फ बारे में जानता है लॉग इन करें)।

यह एक उपयोगकर्ता को लॉगिन देने की प्रक्रिया के माध्यम से चलता है, जिसे आप रोक सकते हैं और ओवरराइड कर सकते हैं (find_by_login_method के साथ)। एक अतिरिक्त बोनस के लिए आप भी ओवरराइड कर सकते हैं, login_field और password_field या यहाँ तक कि verify_password_method

+2

नाइस (यह बहुत समझ में आता है - एथलॉगिक बीमार है!) –

+0

सहमत हैं, मैं इसे प्रमाणित प्रमाणीकरण के लिए पसंद करता हूं, डिजाइन बहुत ठोस है। –

+0

यदि आप उपयोगकर्ता को find_by_login_or_email जोड़ते हैं, तो आप कक्षा को छोड़ सकते हैं। find_by_login (लॉगिन) || find_by_email (लॉगिन) – Jared

-2

यह कह रहा है UserSession में कोई ईमेल क्षेत्र नहीं है। यह उपयोगकर्ता को देख नहीं है क्योंकि आपके पास:

form_for @user_session 
-1

मैं बिल्कुल पता नहीं कैसे Authlogic काम करता है, लेकिन मेरा अनुमान है कि तुम क्या

साथ लेकिन मेरे उन निश्चित रूप से समाप्त हो गया की तरह है तालिका में एक ईमेल फ़ील्ड है, आदि

इसकी आवाज़ से, इसका मतलब यह नहीं है कि आपके उपयोगकर्ता सत्र में यह है, या यह करता है?

+0

एक Authlogic सत्र एक मॉडल है कि किसी भी डेटाबेस स्पर्श नहीं करता है, लेकिन इसके बजाय मॉडल यह है साथ सूचना का आदान के लिए एक सत्र के रूप में अभिनय। – Aupajo

0

मैं एक ही समस्या थी और पाया क्या आप वाकई लॉगिन (अपने स्कीमा और डेटाबेस में नहीं है क्या आप के रूप में वैसे भी इसकी आवश्यकता नहीं होगी करना है 'क्या तुम एक उपयोगकर्ता मॉडल, सबसे आसान तरीका Authlogic में प्रमाणीकरण के लिए ईमेल का उपयोग करने का उपयोग कर रहे मानते हुए के रूप में मेरे पास है ईमेल रोजगार)

18

निर्णय से हम है:

class User < ActiveRecord::Base 

    acts_as_authentic do |c| 
    c.login_field = 'email' 
    end 

end 
+1

बस सभी को यह बताना कि यह बहुत अच्छा काम करता है। चियर्स – BenB

0

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

यदि आपके उपयोगकर्ता मॉडल में लॉगिन फ़ील्ड नहीं है तो इस समस्या को दूर जाना चाहिए क्योंकि ऑथलॉगिक का उपयोग करने के लिए डिफ़ॉल्ट होगा: इसके बजाय ईमेल।

1

कृपया जांचें कि आपका user_session विरासत UserSession < Authlogic :: सत्र :: बेस लेकिन नहीं < ActiveRecord :: बेस

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