How to integrate login required decorator to flask routes with a static user ID and password?

Question:

I am new to flask and python, i am trying to add login required and all routes other than home page. I read about flask-login module, haven’t had any success. Looking for suggestions !

I tried using flask-login and prevent access of “/data” route. It did not work. My login requirement is very simple, allow login if user pass is admin/admin. And make sure the user is logged in for all subsequent routes.

Here is my flask code

from flask import Flask, render_template, redirect, url_for, request
import subprocess
import os
import datetime
import time
app = Flask(__name__)


@app.route("/")
def home():
   now = datetime.datetime.now()
   timeString = now.strftime("%Y-%m-%d %H:%M")
   templateData = {
      'title' : 'HELLO!',
      'time': timeString
      }
   return render_template('main.html', **templateData)


@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'admin':
            error = 'Invalid Credentials. Please try again.'
        else:
            return redirect(url_for('data'))
    return render_template('login.html', error=error)

@app.route("/data")
def data():
   now = datetime.datetime.now()
   timeString = now.strftime("%Y-%m-%d %H:%M")
   templateData = {
      'title' : 'HELLO!',
      'time': timeString
      }
   return render_template('api.html', **templateData)

if __name__ == "__main__":
   app.run(host='0.0.0.0', debug=True)

I dont want /data route to be accessed without login as admin/admin

Asked By: ayrton_senna

||

Answers:

flask_login should do the trick.

use the @login_required decorator on any route that you want to make unavailable to users who aren’t currently logged in.

from flask_login import login_required

@app.route("/data")
@login_required
def data():
    ...
    ...

the go-to session management extension for flask is session.
for this example, you’ll need a secret key…

import secrets

app = Flask(__name__)
app.config['SECRET_KEY'] = secrets.token_hex(16)

and an example usage of flask session management…

from flask import session

@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'admin':
            error = 'Invalid Credentials. Please try again.'
        else:
            session['logged_in'] = True
            return redirect(url_for('data'))
    return render_template('login.html', error=error)
Answered By: None
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.