Commit 79b5d8261ae8f3a72742144b66952c9580c09c1c
1 parent
82ae16fc
Exists in
master
and in
29 other branches
Login with login OR email
Showing
5 changed files
with
27 additions
and
4 deletions
Show diff stats
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> </p></div> | 18 | <div id='url-check'><p> </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 < ActiveSupport::TestCase | @@ -53,6 +53,8 @@ class UserTest < 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 |