Rails 4.0 ve Devise 3.0.0.rc. kullanıyorum.Rails ile kullanıcı adı ile giriş yapma 4
Devise'yi varsayılanlarıyla yükledim - yani e-posta adresinizi kullanarak/oturum açtığınızda. Ancak, kullanıcıların e-posta adresleri yerine bir kullanıcı adıyla kaydolabilmesini istiyorum. Demiryollarını, hangi parametrelerin değişeceğine ve raylar için değiştirmem gereken şeyler için burada bulabileceğim herhangi bir tavsiyeye göre takip ettim. Ancak, yeni bir kullanıcı oluşturmaya çalıştığımda, hata alıyorum. e-posta boş bırakılamaz '. Bunun neye sebep olduğuna dair bir fikri var mı, nasıl düzeltebilirim? Teşekkürler!!
Kodu:
uygulama denetleyicisi:
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
İşareti (kayıt formu hemen hemen aynıdır):
<%= 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>
devise.rb konfigürasyonunda:
config.authentication_keys = [ :username ]
kullanıcı devam Makaralı:
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
Bu harika çalıştı, teşekkürler. Onu özlediğime inanamıyorum! Belki de Devise, tüm doğrulamaları sadece bir e-posta adresi değil, kullanıcı adı gibi genel seçeneklere çevirmek için bir seçenek eklemelidir ...? – ecs
Gerekli olmayabilir. Yine de, geçerliliği olan modülü kullanabilir ve e-posta varlığı gereksinimini devre dışı bırakarak bir yöntemi tanımlayabilirsiniz. Kullanıcı sınıfınızda false end '. – eugen
Teşekkürler, bunu saatlerce tamir etmeye çalışıyorum ve işe yarıyor. – Michael