2013-08-01 12 views
5

私はRails 4.0とDevise 3.0.0.rc.を使用していますDevits with Railsを使用したユーザ名でのログイン4

私はそのデフォルト値を使用して工夫をインストール - すなわちあなたのメールアドレスを使用して/サインアップしてください。しかし、私は、ユーザーが電子メールアドレスの代わりにユーザー名でサインアップできるようにしたいと思います。私はrailscastsに変更するパラメータと、Rails 4のために変更する必要のあるものについてここで見つけることができるアドバイスを参考にしました。しかし、新しいユーザーを作成しようとすると、電子メールは空白にできません。誰がこれを引き起こしているか、どのように私はそれを修正することができますかについてのアイデアを持っていますか?ありがとう!!

コード:

アプリケーションコントローラ:で

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 

サイン(フォームをサインアップはほとんど同じである):devise.rb Configで

<%= 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> 

config.authentication_keys = [ :username ] 

ユーザーcontローラー:

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 

答えて

4

Userモデルdeviseセクションからvalidatableを削除する - このオプションは、電子メールアドレスの存在、一意性と形式を検証します。パスワードの存在、確認、および長さのための独自の検証を手動で追加する必要があります。

+0

これはうまくいきました。ありがとうございます。私はそれを逃したとは信じられない!おそらく、Deviseは、電子メールだけでなく、ユーザー名などの一般的なオプションにすべての検証を変更するオプションを追加する必要があります...? – ecs

+3

必要ないかもしれません。有効なモジュールを使用して、 'def email_required? 'というメソッドを定義するだけで電子メールの存在要件を無効にできます。 false end'をUserクラスに追加します。 – eugen

+0

ありがとう、私はこれを数時間修正しようとしてきましたが、これはうまくいきます。 – Michael

関連する問題