मुझे लॉगिन प्रक्रिया के दौरान डेविस सत्र नियंत्रक को ओवरराइड करने की आवश्यकता है (रेल 3.0.9, रूबी 1.9.2, डेविस 1.3.4), मैंने इसे बिना किसी प्रभाव के करने की कोशिश की

class SessionsController < Devise::SessionsController

  # GET /resource/sign_in
  def new
    resource = build_resource
    clean_up_passwords(resource)
    respond_with_navigational(resource, stub_options(resource)){ render_with_scope :new }
  end

end

विचार?

संपादित करें जैसा कि उत्तर में बताया गया है, मुझे मार्ग बदलने की भी आवश्यकता है। इसके अलावा, मुझे विचारों की प्रतिलिपि बनाने की भी आवश्यकता है। इसे यहां बेहतर तरीके से समझाया गया है http://presentations.royvandewater.com/authentication-with-devise.html#8

मेरी कस्टम रणनीति:

devise.rb
config.warden do |manager|
  manager.strategies.add(:custom_strategy) do
    def authenticate!
      ... authenticate against 3rd party API...
      if res.body =~ /success/
        u = User.find_or_initialize_by_email(params[:user][:email])
        if u.new_record?
          u.save
        end
      success!(u)
    end
  end
end
8
Johnny Klassy 9 नवम्बर 2011, 23:18

1 उत्तर

सबसे बढ़िया उत्तर

क्या आपने अपने नए नियंत्रक का उपयोग करने के लिए अपना मार्ग बदल दिया है?

/config/routes.rb

  devise_for :users, :controllers => {:sessions => "sessions"}
13
Kyle d'Oliveira 9 नवम्बर 2011, 23:24
हां, मैंने अभी इसे भी समझ लिया है और मुझे उन विचारों की प्रतिलिपि बनाने की भी आवश्यकता है जो ऐसा लगता है। क्या मैं उपरोक्त परिवर्तन के अतिरिक्त मूल devise_for :users मार्ग रखता हूं? मैं अन्य कार्यों को ओवरराइड नहीं करना चाहता।
 – 
Johnny Klassy
9 नवम्बर 2011, 23:34
इसके साथ एक और समस्या है, यह मेरे द्वारा जोड़ी गई कस्टम रणनीति के अलावा डिफ़ॉल्ट डेटाबेस प्रमाणीकरण रणनीति को भी निष्पादित नहीं करता है, यह सुनिश्चित नहीं है कि इसे कैसे ठीक किया जाए।
 – 
Johnny Klassy
9 नवम्बर 2011, 23:52
केवल 1 devise_for होना चाहिए, और आपके द्वारा विचारों की प्रतिलिपि बनाने के बाद इसे उन कार्यों के साथ भी काम करना चाहिए जिन्हें आपने ओवरराइड नहीं किया था। जहाँ तक आपके अन्य मुद्दे का सवाल है, मैं पूरी तरह से अनुसरण नहीं कर रहा हूँ। क्या आपके मॉडल में :database_authenticatable विकल्प सेट है। (यानी वसीयत :database_authenticatable)
 – 
Kyle d'Oliveira
10 नवम्बर 2011, 00:13
हां :database_authenticable हमेशा User के लिए रहा है। मेरे पास इसके अतिरिक्त एक कस्टम रणनीति भी है, विवरण के लिए संपादित प्रश्न देखें।
 – 
Johnny Klassy
10 नवम्बर 2011, 01:08
मेरी कस्टम रणनीति अभी भी निष्पादित होती है लेकिन अगर यह प्रमाणित करने में विफल रहती है तो यह :database_authenticable तक नहीं रह जाती है
 – 
Johnny Klassy
10 नवम्बर 2011, 01:09