Devise default olarak e-posta ile kayıt ve giriş ile kullanılmaktadır. Fakat kurmak istediğiniz siztemde tc, telefon, öğrenci numarası gibi uniq alanlar ile de giriş yapılmasını sağlayabilirsiniz. Bunun için devise modelinizi oluşturduktan sonra isteğinize göre tc – telefon – öğrenci numarası alanlarını ekleyelim.
1 2 3 4 |
rails g migration AddTcToUser tc:string:uniq rails g migration AddPhoneToUser phone:string:uniq rails g migration AddStuNumToUser stu_num:string:uniq rake db:migrate |
Gerekli alanları ekleyip migrate işlemini tamamladıktan sonra application_controller.rb dosyasında devise sanitizer için permit edilecek alanları belirtmemiz gerek.
1 2 3 4 5 6 7 8 |
before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:tc, :stu_num, :phone, :email, :password, :password_confirmation, :remember_me]) devise_parameter_sanitizer.permit(:sign_in, keys: [:login,:tc,:stu_num, :phone, :email, :password, :remember_me]) devise_parameter_sanitizer.permit(:account_update, keys: [:tc,:stu_num, :phone, :email, :password, :password_confirmation, :current_password]) end |
Şimdi user modelimizde giriş yaparken e-mail yerine login adında bir alanın olacağını belirtelim. Ayrıca validasyonları da ayarlayıp veritabanı sorgumuzu da değiştirelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
attr_accessor :login devise :database_authenticatable, :recoverable, :rememberable, :registerable, :trackable, :validatable, :authentication_keys => {email: false, login: true} validates :tc, presence: true validates :phone, presence: true validates :stu_num, presence: true validates :password, presence: true, on: :create validates_uniqueness_of :tc, :email, :stu_num, :phone validates :tc, length: { is: 11 } validates :tc, length: { is: 10 } validates :tc, numericality: true validates :stu_num, numericality: true validates :phone, numericality: true def self.find_for_database_authentication(warden_conditions) conditions = warden_conditions.dup if login = conditions.delete(:login) where(conditions.to_h).where(["lower(tc) = :value OR lower(email) = :value OR lower(stu_num) = :value OR lower(phone) = :value", { :value => login.downcase }]).first else where(conditions.to_h).first end end |
Son olarak app/view/session/new.html.erb ve app/view/registrations/new.html.erb dosyalarımıza da alanları ilave edelim ve aşağıdaki şekilde güncelleyelim.
1 2 3 4 5 6 7 |
#Silinecek <p><%= f.label :email %><br /> <%= f.email_field :email %></p> #Eklenecek <p><%= f.label :login %><br /> <%= f.text_field :login %></p> |
1 2 3 4 5 6 7 8 9 10 11 |
<p><%= f.label :tc %><br /> <%= f.text_field :tc %></p> <p><%= f.label :phone %><br /> <%= f.text_field :phone %></p> <p><%= f.label :stu_num %><br /> <%= f.text_field :stu_num %></p> <p><%= f.label :email %><br /> <%= f.email_field :email %></p> |
Bir cevap yazın