Skip to content

Commit

Permalink
enable login by email (#274)
Browse files Browse the repository at this point in the history
* allows login using username or email address

* tests if login with email works

* conforming with pep8 standards

* testing email

* added "username or e-mail" in the login form
  • Loading branch information
maikia authored and agramfort committed Nov 12, 2019
1 parent 1c2cfe7 commit 2879a56
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 5 deletions.
21 changes: 21 additions & 0 deletions ramp-database/ramp_database/tools/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,27 @@ def get_user_by_name(session, name):
return select_user_by_name(session, name)


def get_user_by_name_or_email(session, name):
"""Get a user by his/her name or email. It will return true if either
is correct
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
name : str or None
The name of the user. If None, all users will be queried.
Returns
-------
user : :class:`ramp_database.model.User` or list of \
:class:`ramp_database.model.User`
The queried user.
"""
return (select_user_by_email(session, name) or
select_user_by_name(session, name))


def get_team_by_name(session, name):
"""Get a team by its name.
Expand Down
4 changes: 2 additions & 2 deletions ramp-frontend/ramp_frontend/templates/login.html
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ <h4 class="modal-title" id="myModalLabel">Login Error</h4>
{{ form.hidden_tag() }}
<div class="one field">
<div class="required field">
<label>Username</label>
{{ form.user_name(placeholder="username") }}
<label>Username or e-mail</label>
{{ form.user_name(placeholder="username or e-mail") }}
{% for error in form.user_name.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
Expand Down
17 changes: 16 additions & 1 deletion ramp-frontend/ramp_frontend/tests/test_auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from ramp_database.utils import check_password

from ramp_database.tools.user import get_user_by_name
from ramp_database.tools.user import get_user_by_name_or_email

from ramp_frontend import create_app
from ramp_frontend.testing import login_scope
Expand Down Expand Up @@ -92,7 +93,21 @@ def test_login(client_session):
rv = client.post('/login', data=login_info)
assert rv.status_code == 302
assert rv.location == 'http://localhost/problems'
user = get_user_by_name(session, login_info['user_name'])
user = get_user_by_name_or_email(session, login_info['user_name'])
assert user.is_authenticated
logout(client)
rv = client.post('/login', data=login_info, follow_redirects=True)
assert rv.status_code == 200
logout(client)

# POST with a right email as login and password
login_info = {'user_name': 'test_user', 'password': 'test',
'email': '[email protected]'}
rv = client.post('/login', data=login_info)
assert rv.status_code == 302
assert rv.location == 'http://localhost/problems'
user = get_user_by_name_or_email(session,
login_info['email'])
assert user.is_authenticated
logout(client)
rv = client.post('/login', data=login_info, follow_redirects=True)
Expand Down
5 changes: 3 additions & 2 deletions ramp-frontend/ramp_frontend/views/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

from ramp_database.tools.user import add_user
from ramp_database.tools.user import add_user_interaction
from ramp_database.tools.user import get_user_by_name
from ramp_database.tools.user import get_user_by_name_or_email
from ramp_database.tools.user import set_user_by_instance

from ramp_database.model import User
Expand Down Expand Up @@ -74,7 +74,8 @@ def login():
form = LoginForm()
if form.validate_on_submit():
try:
user = get_user_by_name(db.session, name=form.user_name.data)
user = get_user_by_name_or_email(db.session,
name=form.user_name.data)
except NoResultFound:
msg = 'User "{}" does not exist'.format(form.user_name.data)
flash(msg)
Expand Down

0 comments on commit 2879a56

Please sign in to comment.