From b311fcb9de5b5b81ab4fa6e26ed2acd36574c84e Mon Sep 17 00:00:00 2001 From: Patrick Jentsch <p.jentsch@uni-bielefeld.de> Date: Tue, 9 Jul 2019 11:00:41 +0200 Subject: [PATCH] Enable login by username. --- app/auth/forms.py | 9 +++++++-- app/auth/views.py | 19 ++++++++++++++++--- app/templates/auth/login.html.j2 | 6 +++--- app/templates/auth/profile.html.j2 | 25 +++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 app/templates/auth/profile.html.j2 diff --git a/app/auth/forms.py b/app/auth/forms.py index d23e4e2d..23a1db39 100644 --- a/app/auth/forms.py +++ b/app/auth/forms.py @@ -6,8 +6,7 @@ from ..models import User class LoginForm(FlaskForm): - email = StringField('Email', validators=[DataRequired(), Length(1, 64), - Email()]) + login = StringField('Login', validators=[DataRequired(), Length(1, 64)]) password = PasswordField('Password', validators=[DataRequired()]) remember_me = BooleanField('Keep me logged in') submit = SubmitField('Log In') @@ -46,3 +45,9 @@ class PasswordResetRequestForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Length(1, 64), Email()]) submit = SubmitField('Reset Password') + + +class ChangeProfileForm(FlaskForm): + email = StringField('Email', validators=[DataRequired(), Length(1, 64), + Email()]) + submit = SubmitField('Submit') diff --git a/app/auth/views.py b/app/auth/views.py index 95dd2fd8..65ef647f 100644 --- a/app/auth/views.py +++ b/app/auth/views.py @@ -2,7 +2,7 @@ from flask import flash, redirect, render_template, request, url_for from flask_login import current_user, login_required, login_user, logout_user from . import auth from .. import db -from .forms import LoginForm, PasswordResetForm, PasswordResetRequestForm, RegistrationForm +from .forms import ChangeProfileForm, LoginForm, PasswordResetForm, PasswordResetRequestForm, RegistrationForm from ..email import send_email from ..models import User @@ -11,7 +11,9 @@ from ..models import User def login(): form = LoginForm() if form.validate_on_submit(): - user = User.query.filter_by(email=form.email.data).first() + user = User.query.filter_by(email=form.login.data).first() + if user is None: + user = User.query.filter_by(username=form.login.data).first() if user is not None and user.verify_password(form.password.data): login_user(user, form.remember_me.data) next = request.args.get('next') @@ -85,7 +87,7 @@ def resend_confirmation(): send_email(current_user.email, 'Confirm Your Account', 'auth/email/confirm', user=current_user, token=token) flash('A new confirmation email has benn sent to you by email.') - return redirect(url_for('main.index')) + return redirect(url_for('maind.index')) @auth.route('/reset', methods=['GET', 'POST']) @@ -121,3 +123,14 @@ def password_reset(token): return redirect(url_for('main.index')) return render_template('auth/reset_password.html.j2', form=form, title='Password Reset') + + +@auth.route('/profile', methods=['GET', 'POST']) +@login_required +def profile(): + form = ChangeProfileForm() + if form.validate_on_submit(): + flash('It\'s just a test, nothing changed.') + return redirect(url_for('auth.profile')) + return render_template('auth/profile.html.j2', form=form, + title='Profile') diff --git a/app/templates/auth/login.html.j2 b/app/templates/auth/login.html.j2 index 02ffb68a..68710ccd 100644 --- a/app/templates/auth/login.html.j2 +++ b/app/templates/auth/login.html.j2 @@ -24,9 +24,9 @@ <form method="POST"> {{ form.hidden_tag() }} <div class="input-field"> - <i class="material-icons prefix">email</i> - {{ form.email(class='validate', type='email') }} - {{ form.email.label }} + <i class="material-icons prefix">person</i> + {{ form.login(class='validate') }} + {{ form.login.label }} </div> <div class="input-field"> <i class="material-icons prefix">vpn_key</i> diff --git a/app/templates/auth/profile.html.j2 b/app/templates/auth/profile.html.j2 new file mode 100644 index 00000000..37942949 --- /dev/null +++ b/app/templates/auth/profile.html.j2 @@ -0,0 +1,25 @@ +{% extends "base.html.j2" %} + +{% block page_content %} +<div class="col s12"> + <div class="card large"> + <div class="card-content"> + <span class="card-title">Register</span> + <form method="POST"> + {{ form.hidden_tag() }} + <div class="input-field "> + <i class="material-icons prefix">email</i> + {{ form.email(class='validate', type='email') }} + {{ form.email.label }} + {% for error in form.email.errors %} + <span class="helper-text" style="color:red;">{{ error }}</span> + {% endfor %} + </div> + <div class="card-action"> + {{ form.submit(class='btn right') }} + </div> + </form> + </div> + </div> +</div> +{% endblock %} -- GitLab