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
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
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
Grazie, ho cercato di risolvere il problema per ore e questo funziona. – Michael