Używam Rails 4.0 i Devise 3.0.0.rc.Logowanie przy użyciu nazwy użytkownika przy użyciu narzędzia Wymuś z Railsami 4
Zainstalowałem Devise z jego domyślnymi ustawieniami - tzn. Zarejestruj się/używając swojego adresu e-mail. Chciałbym jednak, aby użytkownicy mogli rejestrować się przy użyciu nazwy użytkownika zamiast adresu e-mail. Śledziłem railscasty pod kątem parametrów, które można zmienić, oraz wszelkich porad, które mogę znaleźć na temat rzeczy, które mogą być potrzebne do zmiany Rails 4. Jednak zawsze, gdy próbuję stworzyć nowego użytkownika, otrzymuję komunikat o błędzie " e-mail nie może być pusty ". Czy ktoś ma pomysł, co jest przyczyną tego i jak mogę to naprawić? Dzięki!!
Kod:
kontroler aplikacji:
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
Zaloguj się (Sign up formularza jest prawie taka sama):
<%= 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>
W devise.rb config:
config.authentication_keys = [ :username ]
użytkowników cont Rolka:
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
To działało świetnie, dziękuję. Nie mogę uwierzyć, że tęskniłem za tym! Być może Devise powinien dodać opcję zmiany wszystkich walidacji na typowe opcje, takie jak nazwa użytkownika, a nie tylko e-mail ...? – ecs
Może nie być potrzebny. Nadal można korzystać z modułu sprawdzania poprawności i po prostu wyłączyć wymaganie obecności e-mail, definiując metodę "def email_required"? false 'w twojej klasie użytkownika. – eugen
Dzięki, próbuję naprawić to przez wiele godzin i to działa. – Michael