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 | 119 | # Authenticates a user by their login name and unencrypted password. Returns the user or nil. |
| 120 | 120 | def self.authenticate(login, password, environment = nil) |
| 121 | 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 | 124 | u && u.authenticated?(password) ? u : nil |
| 124 | 125 | end |
| 125 | 126 | ... | ... |
app/views/account/_signup_form.rhtml
| ... | ... | @@ -13,7 +13,8 @@ |
| 13 | 13 | <span id="signup-domain"><%= environment.default_hostname %>/</span> |
| 14 | 14 | <div id='signup-login'> |
| 15 | 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 | 18 | <div id='url-check'><p> </p></div> |
| 18 | 19 | </div> |
| 19 | 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 | 5 | <% labelled_form_for :change_password, @change_password, :url => { :action => 'forgot_password' } do |f| %> |
| 6 | 6 | |
| 7 | 7 | <%= f.text_field :login, |
| 8 | - :onchange => 'this.value = convToValidLogin( this.value )' %> | |
| 8 | + :onchange => 'this.value = convToValidUsername( this.value )' %> | |
| 9 | 9 | |
| 10 | 10 | <%= f.text_field :email %> |
| 11 | 11 | ... | ... |
public/javascripts/application.js
| ... | ... | @@ -29,7 +29,14 @@ function focus_first_field() { |
| 29 | 29 | |
| 30 | 30 | /* * * Convert a string to a valid login name * * */ |
| 31 | 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 | 42 | /* * * Convert a string to a valid login name * * */ |
| ... | ... | @@ -46,6 +53,18 @@ function convToValidIdentifier( str, sep ) { |
| 46 | 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 | 68 | function updateUrlField(name_field, id) { |
| 50 | 69 | url_field = $(id); |
| 51 | 70 | old_url_value = url_field.value; | ... | ... |
test/unit/user_test.rb
| ... | ... | @@ -53,6 +53,8 @@ class UserTest < ActiveSupport::TestCase |
| 53 | 53 | |
| 54 | 54 | def test_should_authenticate_user |
| 55 | 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 | 58 | end |
| 57 | 59 | |
| 58 | 60 | def test_should_authenticate_user_of_nondefault_environment | ... | ... |