Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RoR Devise: Sign in with username OR email

What's the best way to enable users to log in with their email address OR their username? I am using warden + devise for authentication. I think it probably won't be too hard to do it but i guess i need some advice here on where to put all the stuff that is needed. Perhaps devise already provides this feature? Like in the config/initializers/devise.rb you would write:

config.authentication_keys = [ :email, :username ] 

To require both username AND email for signing in. But i really want to have only one field for both username and email and require only one of them. I'll just visualize that with some ASCII art, it should look something like this in the view:

Username or Email: [____________________]  Password: [____________________]  [Sign In] 
like image 523
Patrick Oscity Avatar asked Jun 08 '10 12:06

Patrick Oscity


People also ask

What is Devise gem?

Devise is the cornerstone gem for Ruby on Rails authentication. With Devise, creating a User that can log in and out of your application is so simple because Devise takes care of all the controllers necessary for user creation ( users_controller ) and for user sessions ( users_sessions_controller ).


1 Answers

I have found a solution for the problem. I'm not quite satisfied with it (I'd rather have a way to specify this in the initializer), but it works for now. In the user model I added the following method:

def self.find_for_database_authentication(conditions={})   find_by(username: conditions[:email]) || find_by(email: conditions[:email]) end 

As @sguha and @Chetan have pointed out, another great resource is available on the official devise wiki.

like image 141
Patrick Oscity Avatar answered Sep 30 '22 07:09

Patrick Oscity