Authentication with Flask-Login

auth (vecteezy image)
sqlite database

Simple Register Form

@app.route("/register", methods=['GET', 'POST'])
def register():
form = RegisterForm()
if form.validate_on_submit():
email = form.email.data
password = form.password.data
if User.query.filter_by(email=email).first():
flask.flash("user has already registered")
else:
# create new user
new_user = User(
email = email,
password = generate_password_hash(password, method='pbkdf2:sha256', salt_length=8)
)
db.session.add(new_user)
db.session.commit()
login_user(new_user)
return redirect(url_for('home'))

return render_template("register.html", form=form)

Simple Login Form

@app.route("/", methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
email = form.email.data
password = form.password.data
user = User.query.filter_by(email=email).first()
if user:
if password == user.password:
return redirect(url_for('home'))
else:
flask.flash("incorrect password")
else:
flask.flash("user not found")

return render_template("login.html", form=form)

Flask Login

pip install flask-login
from flask_login import UserMixin, login_user, LoginManager, login_required, current_user, logout_user
app.config['SECRET_KEY'] = "thisissecret"login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.user_loader
def load_user(id):
return User.query.get(int(id))
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100), nullable=False, unique=True)
password = db.Column(db.String(100), nullable=False)
@app.route("/", methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
email = form.email.data
password = form.password.data
user = User.query.filter_by(email=email).first()
if user:
if check_password_hash(user.password, password):
login_user(user)
return redirect(url_for('home'))
else:
flask.flash("incorrect password")
else:
flask.flash("user not found")

return render_template("login.html", form=form)


@app.route("/register", methods=['GET', 'POST'])
def register():
form = RegisterForm()
if form.validate_on_submit():
email = form.email.data
password = form.password.data
if User.query.filter_by(email=email).first():
flask.flash("user has already registered")
else:
# create new user
new_user = User(
email = email,
password = generate_password_hash(password, method='pbkdf2:sha256', salt_length=8)
)
db.session.add(new_user)
db.session.commit()
login_user(new_user)
return redirect(url_for('home'))

return render_template("register.html", form=form)
login user function create session data
@app.route("/home")
@login_required
def home():
return render_template("home.html")
login required decorator function
@app.route("/home")
@login_required
def home():
print(current_user.is_authenticated)
print(current_user.is_active)
return render_template("home.html")
User Mixin class
@app.route("/logout")
def logout():
logout_user()
return redirect(url_for('login'))

--

--

Learning javascript and web-development

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store