Commit 79b5d8261ae8f3a72742144b66952c9580c09c1c

Authored by Braulio Bhavamitra
1 parent 82ae16fc

Login with login OR email

app/models/user.rb
@@ -119,7 +119,8 @@ class User < ActiveRecord::Base @@ -119,7 +119,8 @@ class User < ActiveRecord::Base
119 # Authenticates a user by their login name and unencrypted password. Returns the user or nil. 119 # Authenticates a user by their login name and unencrypted password. Returns the user or nil.
120 def self.authenticate(login, password, environment = nil) 120 def self.authenticate(login, password, environment = nil)
121 environment ||= Environment.default 121 environment ||= Environment.default
122 - u = first :conditions => ['login = ? AND environment_id = ? AND activated_at IS NOT NULL', login, environment.id] # need to get the salt 122 + u = self.first :conditions => ['(login = ? OR email = ?) AND environment_id = ? AND activated_at IS NOT NULL',
  123 + login, login, environment.id] # need to get the salt
123 u && u.authenticated?(password) ? u : nil 124 u && u.authenticated?(password) ? u : nil
124 end 125 end
125 126
app/views/account/_signup_form.rhtml
@@ -13,7 +13,8 @@ @@ -13,7 +13,8 @@
13 <span id="signup-domain"><%= environment.default_hostname %>/</span> 13 <span id="signup-domain"><%= environment.default_hostname %>/</span>
14 <div id='signup-login'> 14 <div id='signup-login'>
15 <div id='signup-login-field' class='formfield'> 15 <div id='signup-login-field' class='formfield'>
16 - <%= required text_field(:user, :login, :id => 'user_login', :onchange => 'this.value = convToValidLogin(this.value);') %> 16 + <%= required text_field(:user, :login, :id => 'user_login',
  17 + :onchange => 'this.value = convToValidUsername(this.value);') %>
17 <div id='url-check'><p>&nbsp;</p></div> 18 <div id='url-check'><p>&nbsp;</p></div>
18 </div> 19 </div>
19 <%= content_tag(:small, _('Choose your login name carefully! It will be your network access and you will not be able to change it later.'), :id => 'signup-balloon') %> 20 <%= content_tag(:small, _('Choose your login name carefully! It will be your network access and you will not be able to change it later.'), :id => 'signup-balloon') %>
app/views/account/forgot_password.rhtml
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <% labelled_form_for :change_password, @change_password, :url => { :action => 'forgot_password' } do |f| %> 5 <% labelled_form_for :change_password, @change_password, :url => { :action => 'forgot_password' } do |f| %>
6 6
7 <%= f.text_field :login, 7 <%= f.text_field :login,
8 - :onchange => 'this.value = convToValidLogin( this.value )' %> 8 + :onchange => 'this.value = convToValidUsername( this.value )' %>
9 9
10 <%= f.text_field :email %> 10 <%= f.text_field :email %>
11 11
public/javascripts/application.js
@@ -29,7 +29,14 @@ function focus_first_field() { @@ -29,7 +29,14 @@ function focus_first_field() {
29 29
30 /* * * Convert a string to a valid login name * * */ 30 /* * * Convert a string to a valid login name * * */
31 function convToValidLogin( str ) { 31 function convToValidLogin( str ) {
32 - return convToValidIdentifier(str, '') 32 + if (str.indexOf('@') == -1)
  33 + return convToValidUsername(str);
  34 + else
  35 + return convToValidEmail(str);
  36 +}
  37 +
  38 +function convToValidUsername( str ) {
  39 + return convToValidIdentifier(str, '');
33 } 40 }
34 41
35 /* * * Convert a string to a valid login name * * */ 42 /* * * Convert a string to a valid login name * * */
@@ -46,6 +53,18 @@ function convToValidIdentifier( str, sep ) { @@ -46,6 +53,18 @@ function convToValidIdentifier( str, sep ) {
46 .replace( /[^-_a-z0-9.]+/g, sep ) 53 .replace( /[^-_a-z0-9.]+/g, sep )
47 } 54 }
48 55
  56 +function convToValidEmail( str ) {
  57 + return str.toLowerCase()
  58 + .replace( /á|à|ã|â/g, "a" )
  59 + .replace( /é|ê/g, "e" )
  60 + .replace( /í/g, "i" )
  61 + .replace( /ó|ô|õ|ö/g, "o" )
  62 + .replace( /ú|ũ|ü/g, "u" )
  63 + .replace( /ñ/g, "n" )
  64 + .replace( /ç/g, "c" )
  65 + .replace( /[^@a-z0-9!#$%&'*+-/=?^_`{|}~.]+/g, '' )
  66 +}
  67 +
49 function updateUrlField(name_field, id) { 68 function updateUrlField(name_field, id) {
50 url_field = $(id); 69 url_field = $(id);
51 old_url_value = url_field.value; 70 old_url_value = url_field.value;
test/unit/user_test.rb
@@ -53,6 +53,8 @@ class UserTest &lt; ActiveSupport::TestCase @@ -53,6 +53,8 @@ class UserTest &lt; ActiveSupport::TestCase
53 53
54 def test_should_authenticate_user 54 def test_should_authenticate_user
55 assert_equal users(:johndoe), User.authenticate('johndoe', 'test') 55 assert_equal users(:johndoe), User.authenticate('johndoe', 'test')
  56 + assert_equal users(:johndoe), User.authenticate('johndoe@localhost.localdomain', 'test')
  57 + assert_equal nil, User.authenticate('wrongemail@localhost', 'test')
56 end 58 end
57 59
58 def test_should_authenticate_user_of_nondefault_environment 60 def test_should_authenticate_user_of_nondefault_environment