From 960d40278cf1ae83c75ef8a61778fdde66120d72 Mon Sep 17 00:00:00 2001 From: Raphael Date: Wed, 8 Sep 2010 10:59:08 -0700 Subject: [PATCH] Add username, login with username or email --- app/models/user.rb | 9 +++++++++ app/views/devise/registrations/new.html.haml | 3 +++ app/views/devise/sessions/new.html.haml | 4 ++-- config/initializers/devise.rb | 2 +- db/seeds/backer.rb | 1 + db/seeds/dev.rb | 2 ++ db/seeds/tom.rb | 2 ++ spec/factories.rb | 1 + 8 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 95d8149f5..348d6e109 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -5,6 +5,7 @@ class User include Diaspora::UserModules::Friending devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable + key :username, :unique => true key :friend_ids, Array key :pending_request_ids, Array @@ -23,6 +24,14 @@ class User before_validation_on_create :setup_person before_validation :do_bad_things + def self.find_for_authentication(conditions={}) + puts conditions + if conditions[:username] =~ /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i # email regex + conditions[:email] = conditions.delete(:username) + end + super + end + ######## Making things work ######## key :email, String ensure_index :email diff --git a/app/views/devise/registrations/new.html.haml b/app/views/devise/registrations/new.html.haml index dd50d306a..4b461fa01 100644 --- a/app/views/devise/registrations/new.html.haml +++ b/app/views/devise/registrations/new.html.haml @@ -3,6 +3,9 @@ = form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| = devise_error_messages! + %p + = f.label :username + = f.text_field :username %p = f.label :email = f.text_field :email diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.html.haml index daa7e6030..702f1ee02 100644 --- a/app/views/devise/sessions/new.html.haml +++ b/app/views/devise/sessions/new.html.haml @@ -1,7 +1,7 @@ = form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %p - = f.label :email - = f.text_field :email + = f.label :username + = f.text_field :username %p = f.label :password = f.password_field :password diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index f643e48cd..a3bd4fc8f 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -15,7 +15,7 @@ Devise.setup do |config| # authenticating an user, both parameters are required. Remember that those # parameters are used only when authenticating and not when retrieving from # session. If you need permissions, you should implement that in a before filter. - # config.authentication_keys = [ :email ] + config.authentication_keys = [ :username ] # Tell if authentication through request.params is enabled. True by default. # config.params_authenticatable = true diff --git a/db/seeds/backer.rb b/db/seeds/backer.rb index 6344cdfe5..e4635b339 100644 --- a/db/seeds/backer.rb +++ b/db/seeds/backer.rb @@ -16,6 +16,7 @@ def create # Create seed user username = backer_info[backer_number]['username'].gsub(/ /,'').downcase user = User.create( :email => "#{username}@#{username}.joindiaspora.com", + :username => username, :password => "#{username+backer_info[backer_number]['pin'].to_s}", :person => Person.new( :email => "#{username}@#{username}.joindiaspora.com", diff --git a/db/seeds/dev.rb b/db/seeds/dev.rb index e5019400c..c44979057 100644 --- a/db/seeds/dev.rb +++ b/db/seeds/dev.rb @@ -4,6 +4,7 @@ host = "localhost:3000" url = "http://#{host}/" # Create seed user user = User.instantiate!( :email => "tom@tom.joindiaspora.com", + :username => "tom", :password => "evankorth", :person => Person.new( :email => "tom@tom.joindiaspora.com", @@ -13,6 +14,7 @@ user = User.instantiate!( :email => "tom@tom.joindiaspora.com", user.person.save! user2 = User.instantiate!( :email => "korth@tom.joindiaspora.com", + :username => "korth", :password => "evankorth", :person => Person.new( :email => "korth@tom.joindiaspora.com", :url => url, diff --git a/db/seeds/tom.rb b/db/seeds/tom.rb index c4d2e584d..864caa6f2 100644 --- a/db/seeds/tom.rb +++ b/db/seeds/tom.rb @@ -3,6 +3,7 @@ require 'config/environment' remote_url = "http://tom.joindiaspora.com/" # Create seed user user = User.instantiate!( :email => "tom@tom.joindiaspora.com", + :username => "tom", :password => "evankorth", :person => { :email => "tom@tom.joindiaspora.com", @@ -14,6 +15,7 @@ user.person.save! user2 = User.instantiate!( :email => "korth@tom.joindiaspora.com", :password => "evankorth", + :username => "korth", :person => { :email => "korth@tom.joindiaspora.com", :url => remote_url, :profile => { :first_name => "Evan", diff --git a/spec/factories.rb b/spec/factories.rb index 1343d1d54..bb8c8eedb 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -24,6 +24,7 @@ Factory.define :person_with_user, :parent => :person_with_private_key do |p| end Factory.define :user do |u| + u.sequence(:username) {|n| "bob#{n}"} u.sequence(:email) {|n| "bob#{n}@aol.com"} u.password "bluepin7" u.password_confirmation "bluepin7"