allows login using username or email

This commit is contained in:
Juanjo Bazán
2017-06-12 17:26:38 +02:00
parent 62071c50e0
commit 3f11dbe1d5
7 changed files with 31 additions and 5 deletions

View File

@@ -3,7 +3,8 @@ class User < ActiveRecord::Base
include Verification
devise :database_authenticatable, :registerable, :confirmable, :recoverable, :rememberable,
:trackable, :validatable, :omniauthable, :async, :password_expirable, :secure_validatable
:trackable, :validatable, :omniauthable, :async, :password_expirable, :secure_validatable,
authentication_keys: [:login]
acts_as_voter
acts_as_paranoid column: :hidden_at
@@ -48,6 +49,7 @@ class User < ActiveRecord::Base
attr_accessor :skip_password_validation
attr_accessor :use_redeemable_code
attr_accessor :login
scope :administrators, -> { joins(:administrators) }
scope :moderators, -> { joins(:moderator) }
@@ -286,6 +288,16 @@ class User < ActiveRecord::Base
end
delegate :can?, :cannot?, to: :ability
# overwritting of Devise method to allow login using email OR username
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions.to_hash).where(["lower(email) = ? OR username = ?", login.downcase, login]).first
elsif conditions.has_key?(:username) || conditions.has_key?(:email)
where(conditions.to_hash).first
end
end
private
def clean_document_number

View File

@@ -11,7 +11,7 @@
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="row">
<div class="small-12 column">
<%= f.email_field :email, autofocus: true, placeholder: t("devise_views.sessions.new.email_label") %>
<%= f.text_field :login, autofocus: true, placeholder: t("devise_views.sessions.new.login_label") %>
</div>
<div class="small-12 column">