2013-05-23 12 views
7

मैं रेल 4 और डेविस 3.0.0 के साथ काम कर रहा हूं और इन नए मजबूत पैरामीटर का उपयोग करने के लिए नया हूं। मैंने documentation on the Devise wiki का उपयोग कर उपयोगकर्ता मॉडल में एक उपयोगकर्ता नाम जोड़ा। जिस समस्या में मैं दौड़ रहा हूं वह मजबूत पैरामीटर रेल 4 में बदलता है।रेल 4 + डेविस 3.0.0 उपयोगकर्ता नाम

उपयोगकर्ता नाम या ईमेल के साथ लॉग इन करने में सक्षम होने के लिए मैं उपयोगकर्ता मॉडल में :login विशेषता कैसे जोड़ूं?

+0

बस थोड़ा विस्तार करने के लिए, मैं चाहते हैं एक समाधान ढूंढें जिसका मैं उपयोग कर सकता था जिसमें 'संरक्षित_attributes' मणि का पुन: उपयोग शामिल नहीं था। यदि इस मामले में यह संभव है। –

उत्तर

10

वसीयत पर rails4 रीडमी से: https://github.com/plataformatec/devise/tree/rails4#strong-parameters

class ApplicationController < ActionController::Base 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :email) } 
    end 
end 
+0

अच्छा! मुझे लगता है कि मुझे दस्तावेज़ीकरण को थोड़ी अधिक सावधानी से पढ़ना चाहिए था। :) मैंने इसे जोड़ा और यह मदद करने लग रहा था। अब मुझे उपयोगकर्ता के लिए 'अपरिभाषित विधि' लॉगिन 'मिल रहा है। मुझे लगता है कि लॉगिन सूची को पहचानने के लिए मुझे अभी भी साइन इन पेज के लिए कुछ और जोड़ने की जरूरत है। –

+0

ओह, क्षमा करें, आपने कहा कि मॉडल में "उपयोगकर्ता नाम" जोड़ें। प्रतिस्थापित करें: इसके साथ लॉगिन करें: –

+0

से ऊपर उपयोगकर्ता नाम 'लॉगिन' विशेषता का उपयोग यूजरनेम रखने के लिए लॉगिन पेज पर किया जाता है या उपयोगकर्ता प्रकार को लॉगिन करने के लिए ईमेल करता है। मुझे इसे काम करने के लिए सत्र नियंत्रक को ओवरराइड करना पड़ सकता है। –

2

@ justin.chmura

यहाँ कैसे हम यह काम कर रहा हो रही समाप्त हो गया की एक सार है।
https://gist.github.com/AJ-Acevedo/6077336

सार शामिल हैं:
एप्लिकेशन/नियंत्रक/application_controller.rb
एप्लिकेशन/मॉडल/user.rb
config/initializers/devise.rb

2

आप सुनिश्चित करें कि आप

शामिल करना चाहिए
attr_accessor :login 

उपयोगकर्ता मॉडल में। यहां वह जगह है जहां मुझे यह बताने वाला प्रश्न मिला कि attr_accessible को बहिष्कृत किया गया है।

Rails 4 + Devise Login with email or username and strong parameters

Difference between attr_accessor and attr_accessible

यह मेरा एप्लिकेशन/मॉडल/user.rb फ़ाइल कैसा दिखता है।

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

attr_accessor :login 

    def self.find_first_by_auth_conditions(warden_conditions) 
    conditions = warden_conditions.dup 
    if login = conditions.delete(:login) 
     where(conditions).where(["username = :value OR lower(email) = lower(:value)", { :value => login }]).first 
    else 
     where(conditions).first 
    end 
    end 

    validates :username, 
    :uniqueness => { 
    :case_sensitive => false 
    } 
end 
0

यदि आप सभी मापदंडों के साथ निम्नलिखित के रूप में config/initializers में एक मॉड्यूल जोड़ने यह ठीक काम करता है होगा, निम्नलिखित सामग्री के साथ

फ़ाइल config/initializers/devise_permitted_parameters.rb:

module DevisePermittedParameters 
    extend ActiveSupport::Concern 

    included do 
    before_filter :configure_permitted_parameters 
    end 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation) } 
    end 

end 

DeviseController.send :include, DevisePermittedParameters 
संबंधित मुद्दे