2013-08-01 4 views
5

Utilizzo Rails 4.0 e Devise 3.0.0.rc.Accesso con nome utente utilizzando Devise with Rails 4

Ho installato Devise con i suoi valori predefiniti - ovvero registrati/utilizzando il tuo indirizzo email. Tuttavia, mi piacerebbe che gli utenti potessero registrarsi con un nome utente al posto del loro indirizzo email. Ho seguito i railscast in termini di quali parametri modificare, oltre a qualsiasi consiglio che posso trovare qui per cose che potrei dover cambiare per Rails 4. Tuttavia, ogni volta che provo a creare un nuovo utente, ricevo l'errore ' l'email non può essere vuota '. Qualcuno ha un'idea su cosa sta causando questo, e come posso risolvere il problema? Grazie!!

Codice:

controllore di applicazione:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

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

Accedi (modulo iscrizione è praticamente lo stesso):

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
    <div><%= f.label :username %><br /> 
    <%= f.text_field :username, :autofocus => true %></div> 

in config devise.rb:

config.authentication_keys = [ :username ] 

utenti cont Rullo:

private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

# Never trust parameters from the scary internet, only allow the white list through. 
def user_params 
    params.require(:user).permit(:first_name, :middle_names, :last_name, :date_of_birth, :gender, :line_1, :line_2, :line_3, :town, :county, :postcode, :contact_number, :email, :username, :password, :password_confirmation, :remember_me) 
end 

user.rb:

protected 

    def self.find_for_database_authentication(warden_conditions) 
    conditions = warden_conditions.dup 
    login = conditions.delete(:login) 
    where(conditions).where(["lower(username) = :value", { :value => login.downcase }]).first 
    end 

risposta

4

Rimuovere validatable dal devise sezione User modello - questa opzione conferma la presenza, l'unicità e il formato dell'indirizzo email. Dovrai aggiungere manualmente le tue convalide per la presenza di password, la conferma e la lunghezza, però.

+0

Questo ha funzionato benissimo, grazie. Non posso credere di essermi perso quello! Forse Devise dovrebbe aggiungere un'opzione per cambiare tutte le convalide su opzioni comuni come un nome utente, piuttosto che una semplice e-mail ...? – ecs

+3

Potrebbe non essere necessario. È ancora possibile utilizzare il modulo validatable e disabilitare semplicemente il requisito di presenza email definendo un metodo 'def email_required? false end' nella tua classe utente. – eugen

+0

Grazie, ho cercato di risolvere il problema per ore e questo funziona. – Michael