2016-08-16 14 views
-1

私は新しいレールアプリケーションを開発しています。私はdeviseするカスタム値を追加しています。 私は次のようにして、登録を考案するfirst namelast nameusernamephone、およびuser rolesを追加しました:RailsカスタマイズしたDevitsサインイン/アップ

app/controllers

私はregistrations_controller.rbを作成し、以下の

を追加しました:

classRegistrationsController < Devise: RegistrationsController 

     private 

     def sign_up_params 
      params.require(:user).permit(:fname, :lname, :username, :phone:, :email, :password:, :password_confirmation, :admin, :rgroup, :rlab) 
     end 
    end 

そして、私のルートでの.rb私は追加:

devise_for :users, :controllers => { registrations 'registrations', sessions 'sessions' } 

今どこにいるの?

私は私のアプリ/コントローラで、私が持っているファイルでsessions_controller.rbを作成:

class SessionsController < Devise::SessionsController 

    private 

    def sign_in_params 

    end 

end 

そして、何が欲しいは、ユーザー名または電子メールでログインできるようにすることです。しかし、私はこれを書く方法については全く考えていません。そして、ほとんどの例は私にとっては紛らわしいものです。

あなたは誰ですか?

+1

あなたはまず適切にドキュメントをチェックする必要があります。 - https://github.com/plataformatec/devise/wiki/How-Tos - それを見つけて実装し、問題があるかどうか質問します。 – arjun

答えて

1

まず第一に、あなたのUserモデルに次のように行うことができます例としてDevise custom login

を見てみましょう:

class User < ActiveRecord::Base 
    validate :validate_username 

    attr_accessor :login 

    def self.find_for_database_authentication(warden_conditions) 
    conditions = warden_conditions.dup 
    # conditions[:email].downcase! if conditions[:email] 
    collection = with_deleted.where(conditions.to_hash.except(:login)) 
    if conditions[:login] 
     value = conditions[:login].downcase 
     collection = collection.where("username = :value OR email = :value", value: value) 
    end 
    return unless record = collection.first 
    record.restore(recursive: true) if record.deleted? 
    record 
    end 

    def login 
    @login || username || email 
    end 

    private 

    def validate_username 
    if User.where(email: username).exists? 
     errors.add(:username, :invalid) 
    end 
    end 
end 

あなたのApplicationControllerにに以下を追加する必要があります

class ApplicationController < ActionController::Base 
    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    added_attrs = %i(username first_name last_name phone user_role email password password_confirmation remember_me) 
    devise_parameter_sanitizer.permit :sign_up, keys: added_attrs 
    devise_parameter_sanitizer.permit :account_update, keys: added_attrs 
    end 
end 

これをあなたのconfig/initializers/devise.rbに追加:

config.authentication_keys = [ :login ] 

そして、あなたの意見(HAMLを使用して、あなたのを想定)で:

= simple_form_for resource, as: resource_name, url: session_path(resource_name) do |f| 
    .form-inputs 
    = f.input :login, autofocus: true 
    = f.input :password, hint: "" 
    = f.input :remember_me, as: :boolean if devise_mapping.rememberable? 
    .form-action 
    = submit_tag("Login") 
関連する問題