-
-
Save jem/1236378 to your computer and use it in GitHub Desktop.
Devise configuration to allow username or email address for sign_in, confirmation, unlock, forgot password instructions.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
################################################################ | |
# For views/migrations etc. check http://tinyurl.com/3xfx3zm # | |
################################################################ | |
# File : RAILS_APP/config/initializers/devise.rb | |
# Change the following only. Rest can stay same | |
# NOTE : You must use devise master or any version released after Mar 13, 2011 to get everything mentioned here working. | |
config.authentication_keys = [ :login ] | |
config.confirmation_keys = [ :login ] | |
config.unlock_keys = [ :login ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Does not require meta_where. | |
# File : RAILS_APP/app/models/user.rb | |
# Your user model. Select appropriate model depending on your devise config | |
# To facilitate username or email login | |
attr_accessor :login | |
# Setup accessible (or protected) attributes for your model | |
# NOTE the :login here. | |
attr_accessible :login, :username, :email, :password, :password_confirmation, :remember_me | |
# Essential functions | |
protected | |
def self.find_for_database_authentication(conditions) | |
login = conditions.delete(:login) | |
where(conditions).where('username = ? OR email = ?', login, login).first | |
end | |
def self.find_or_initialize_with_errors(required_attributes, attributes, error=:invalid) | |
case_insensitive_keys.each { |k| attributes[k].try(:downcase!) } | |
attributes = attributes.slice(*required_attributes) | |
attributes.delete_if { |key, value| value.blank? } | |
if attributes.size == required_attributes.size | |
if attributes.has_key?(:login) | |
login = attributes.delete(:login) | |
record = find_record(login) | |
else | |
record = where(attributes).first | |
end | |
end | |
unless record | |
record = new | |
required_attributes.each do |key| | |
value = attributes[key] | |
record.send("#{key}=", value) | |
record.errors.add(key, value.present? ? error : :blank) | |
end | |
end | |
record | |
end | |
def self.find_record(login) | |
where('username = ? OR email = ?', login, login).first | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment