diff --git a/app/auth/forms.py b/app/auth/forms.py
index df1e46b60de274aee09e2cc1e505676247e5fa4a..584962775c47cbbf1a745b9c80865587e5d0110c 100644
--- a/app/auth/forms.py
+++ b/app/auth/forms.py
@@ -6,7 +6,7 @@ from wtforms.validators import DataRequired, Email, EqualTo, Length, Regexp
 
 
 class LoginForm(FlaskForm):
-    user = StringField('Username', validators=[DataRequired(), Length(1, 64)])
+    email = StringField('Email', validators=[DataRequired(), Email()])
     password = PasswordField('Password', validators=[DataRequired()])
     remember_me = BooleanField('Keep me logged in')
     submit = SubmitField('Log In')
diff --git a/app/auth/views.py b/app/auth/views.py
index ee6b75d4761257fefe173f646a59e8ea15fd8770..d1b9967b86e6aa625192e42f0870a2061f592848 100644
--- a/app/auth/views.py
+++ b/app/auth/views.py
@@ -24,18 +24,18 @@ def before_request():
         return redirect(url_for('auth.unconfirmed'))
 
 
-@auth.route('/login')
+@auth.route('/login', methods=['GET', 'POST'])
 def login():
     login_form = LoginForm(prefix='login-form')
     if login_form.validate_on_submit():
-        user = User.query.filter_by(username=login_form.user.data).first()
+        user = User.query.filter_by(email=login_form.email.data).first()
         if user is not None and user.verify_password(login_form.password.data):
             login_user(user, login_form.remember_me.data)
             next = request.args.get('next')
             if next is None or not next.startswith('/'):
                 next = url_for('main.dashboard')
             return redirect(next)
-        flash('Invalid username or password.')
+        flash('Invalid email or password.')
     return render_template('auth/login.html.j2', login_form=login_form,
                            title='nopaque')
 
diff --git a/app/main/views.py b/app/main/views.py
index d2be274a9348f0f9b7d99b18af70eb31bffa930b..d1a8636ad1c62e3fe416c7dfd35520810bbf0469 100644
--- a/app/main/views.py
+++ b/app/main/views.py
@@ -1,6 +1,6 @@
 from app.auth.forms import LoginForm
 from app.models import User
-from flask import flash, redirect, render_template, request, url_for
+from flask import flash, redirect, render_template, url_for
 from flask_login import login_required, login_user
 from . import main
 
@@ -9,14 +9,11 @@ from . import main
 def index():
     login_form = LoginForm(prefix='login-form')
     if login_form.validate_on_submit():
-        user = User.query.filter_by(username=login_form.user.data).first()
+        user = User.query.filter_by(email=login_form.email.data).first()
         if user is not None and user.verify_password(login_form.password.data):
             login_user(user, login_form.remember_me.data)
-            next = request.args.get('next')
-            if next is None or not next.startswith('/'):
-                next = url_for('main.dashboard')
-            return redirect(next)
-        flash('Invalid username or password.')
+            return redirect(url_for('main.dashboard'))
+        flash('Invalid email or password.')
     return render_template('main/index.html.j2', login_form=login_form,
                            title='nopaque')
 
diff --git a/app/templates/auth/login.html.j2 b/app/templates/auth/login.html.j2
index 6d90327ab4cf7b81d7188fa80d9fdbae1fa0a818..c51e5d13c780d82ee3bc00f8597a98fa3ab4aef1 100644
--- a/app/templates/auth/login.html.j2
+++ b/app/templates/auth/login.html.j2
@@ -14,9 +14,9 @@
         {{ login_form.hidden_tag() }}
         <div class="input-field">
           <i class="material-icons prefix">person</i>
-          {{ login_form.user(class='validate') }}
-          {{ login_form.user.label }}
-          {% for error in login_form.user.errors %}
+          {{ login_form.email(class='validate') }}
+          {{ login_form.email.label }}
+          {% for error in login_form.email.errors %}
             <span class="helper-text red-text">{{ error }}</span>
           {% endfor %}
         </div>
diff --git a/app/templates/auth/reset_password.html.j2 b/app/templates/auth/reset_password.html.j2
index 4bcb4a7decc2ff969628d775c89b8ab60ff3a339..d913ec5f38b3ae9b8bcabe2ed39405a2e26151a0 100644
--- a/app/templates/auth/reset_password.html.j2
+++ b/app/templates/auth/reset_password.html.j2
@@ -27,7 +27,7 @@
         </div>
       </div>
       <div class="card-action right-align">
-        {{ form.submit(class='btn') }}
+        {{ reset_password_form.submit(class='btn') }}
       </div>
     </form>
   </div>
diff --git a/app/templates/main/index.html.j2 b/app/templates/main/index.html.j2
index 6b97e6e9a9e1c0e8854139199cd3fefb51543021..bb5384905c15382d43bc6a64d4db1e32e7a382a7 100644
--- a/app/templates/main/index.html.j2
+++ b/app/templates/main/index.html.j2
@@ -100,9 +100,9 @@
                 {{ login_form.hidden_tag() }}
                 <div class="input-field">
                   <i class="material-icons prefix">person</i>
-                  {{ login_form.user(class='validate') }}
-                  {{ login_form.user.label }}
-                  {% for error in login_form.user.errors %}
+                  {{ login_form.email(class='validate') }}
+                  {{ login_form.email.label }}
+                  {% for error in login_form.email.errors %}
                     <span class="helper-text red-text">{{ error }}</span>
                   {% endfor %}
                 </div>