2013-05-23 2 views
7

Sto lavorando con Rails 4 e Devise 3.0.0 e sono nuovo nell'usare questi nuovi paramter forti. Ho aggiunto un nome utente al modello Utente utilizzando lo documentation on the Devise wiki. Il problema che sto incontrando è il forte cambiamento dei parametri in Rails 4.Rails 4 + Devise 3.0.0 Aggiunta del nome utente

Come si aggiunge l'attributo :login al modello utente per abilitare l'accesso con il nome utente o l'e-mail?

+0

Tanto per espandere un po ', mi piacerebbe trovare una soluzione che potrei usare che non implicasse il riutilizzo della gemma 'protected_attributes'. Se è possibile in questo caso. –

risposta

10

Dal readme rails4 su disposizione testamentaria: 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

Bello! Credo che avrei dovuto leggere la documentazione un po 'più attentamente. :) L'ho aggiunto e questo mi è sembrato di aiuto. Ora sto ricevendo il 'metodo non definito 'login' per l'utente'. Presumo che devo ancora aggiungere qualcos'altro per la pagina di accesso per riconoscere l'attributo login. –

+0

oh, mi dispiace, hai detto aggiungi un "nome utente" al modello. sostituisci: accedi con: nome utente sopra –

+0

L'attributo ': login' è appena usato nella pagina di accesso per contenere il nome utente o l'e-mail che l'utente digita per accedere. Potrei dover semplicemente scavalcare il controller delle sessioni per farlo funzionare. –

2

@ justin.chmura

Ecco una sostanza di come abbiamo finito per farlo funzionare.
https://gist.github.com/AJ-Acevedo/6077336

Gist contiene:
app/controllers/application_controller.rb
app/modelli/user.rb
config/inizializzatori/devise.rb

2

È necessario assicurarsi di includere il

attr_accessor :login 

nel modello utente. Qui è dove ho trovato la domanda che spiega che attr_accessible è deprecato.

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

Difference between attr_accessor and attr_accessible

Questo è ciò che il mio app// file di modelli user.rb assomiglia.

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

Sarà funziona bene se si aggiunge un modulo in config/initializers come seguenti con tutti i parametri,

File config/initializers/devise_permitted_parameters.rb con i seguenti contenuti:

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