2013-08-01 14 views
5

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 

cevap

4

User modeli devise bölümünden validatable çıkarın - bu seçenek e-posta adresinin bulunması, tekliği ve biçimini doğrular. Yine de, parola durumu, onaylama ve uzunluk için kendi doğrulamaları el ile eklemeniz gerekir.

+0

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

+3

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

+0

Teşekkürler, bunu saatlerce tamir etmeye çalışıyorum ve işe yarıyor. – Michael