2013-05-02 10 views
5

मैं सोच रहा हूं कि devise :token_authenticable का उपयोग करके एक कस्टम प्रमाणीकरण रणनीति को कैसे कार्यान्वित किया जाए।उपयोग करने के लिए कस्टम प्रमाणीकरण रणनीति का उपयोग: टोकन_authenticable

मुझे पहले से ही devise :database_authenticatable का उपयोग कर मॉडल के साथ इसे कैसे करना है, इस पर निर्देश मिलते हैं जो here को कवर किया गया है।

मॉडल I प्रमाणीकृत करने का प्रयास कर रहा है नाम Pupil है। तो यहाँ मेरे वर्तमान रणनीति (config/initializers/custom_auth.rb में स्थित) है:

Warden::Strategies.add(:auth_pupil_strategy) do 
    # missing valid? method indicates this strategy is always applied 

    def authenticate! 
    fail!("YOU SHALL NOT PASS!") 
    end 
end 

और मेरी config/initializers/devise.rb (भी :scope => :pupil बिना इसे करने की कोशिश):

config.warden do |manager| 
    manager.default_strategies(:scope => :pupil).unshift :auth_pupil_strategy 
end 

तो यह उपयोगकर्ता सक्षम beeing नहीं करने के लिए नेतृत्व चाहिए लॉगिन करने के लिए, लेकिन किसी भी तरह यह रणनीति devise :database_authenticatable से devise :token_authenticable पर स्विच करते समय लागू नहीं होती है।

शायद मुझे अभी :scope सही लगेगा।

अब, यहां अजीब चीज है: जब भी कोई उपयोगकर्ता अमान्य टोकन में प्रवेश करता है तो मेरी रणनीति लागू होती है और "आप पास नहीं होंगे!" वापस आ गया है हालांकि जब सही टोकन की आपूर्ति की जाती है, तो उपयोगकर्ता ठीक से लॉग इन कर सकता है।

+0

शर्म की बात है कि कोई भी था एबीएल ई के साथ आपकी मदद करने के लिए। क्या आप समाधान ढूंढने में सक्षम थे? – seanhussey

+0

शायद http://kyan.com/blog/2013/10/11/devise-authentication-strategies मदद करेंगे? –

+0

आपको एक 'वैध' लागू करना होगा? अपनी रणनीति के लिए विधि भी। मुझे नहीं पता कि इससे कुछ हल हो जाएगा, लेकिन यह निश्चित रूप से किसी भी रणनीति के लिए एक शर्त है (उदाहरण के लिए जॉन बेयनॉन का लिंक देखें)। – conciliator

उत्तर

0

आपकी रणनीति को कॉल नहीं किया गया है क्योंकि आपको वैध ओवरराइड करने की आवश्यकता है? this उत्तर के रूप में विधि का सुझाव;

लेकिन यह भी आप डिफ़ॉल्ट रणनीतियों विधि का उपयोग करना चाहिए, फिर भी जिस तरह से यह प्रयोग किया जा करने का इरादा था एक और, declaration

def default_strategies(*strategies) 
    opts = Hash === strategies.last ? strategies.pop : {} 
    hash = self[:default_strategies] 
    scope = opts[:scope] || :_all 

    hash[scope] = strategies.flatten unless strategies.empty? 
    hash[scope] || hash[:_all] || [] 
end 

देखने के रूप में आप देख सकते हैं विधि माना जाता है रणनीतियों की एक सरणी प्राप्त करने दें है , कोई सिर्फ गुंजाइश, unshift का उपयोग कर एक चतुर हैक कि ढेर के शीर्ष पर अपनी रणनीतियों डालता है, लेकिन किसी कारण से अप्रत्याशित व्यवहार है जब एक से अधिक कस्टम रणनीतियों

साथ काम कर रहा है

आशा में मदद करता है

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