Get the user's current username using flask-login

Viewed 17

I am trying to create an admin dashboard to manage my webpage using both flask & flask-login. I would like to find the current users username using flask-login so that I can authenticate the user before allowing them to access the admin dashboard.

Here is my current code for app.py

from flask import Flask, render_template, request, redirect
from flask_login import login_required, current_user, login_user, logout_user
from models import UserModel, db, login

app = Flask(__name__,static_url_path='',static_folder='static')
app.secret_key = 'xyz'

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
login.init_app(app)
login.login_view = 'login'
@app.route('/admin')
@login_required
def admin_dashboard():
    return render_template('admin.html')
@app.before_first_request
def create_all():
    db.create_all()
@app.route('/legal')
@app.route('/legal/')
def legal():
    return render_template('legal.html')
@app.route('/legal/tos')
@app.route('/legal/tos/')
def tos():
    return render_template('tos.html')
@app.route('/legal/privacy-policy')
@app.route('/legal/privacy-policy/')
def priv_policy():
    return render_template('privacy-policy.html')
@app.route('/')
def main():
    return render_template('index.html')
@app.route('/dashboard')
@login_required
def dashboard():
    return render_template('dashboard.html')
# @app.before_request
# def log_request_info():
#     app.logger.debug('Headers: %s', request.headers)
#     app.logger.debug('Body: %s', request.get_data())

@app.route('/portal', methods=['POST', 'GET'])
def login():
    if current_user.is_authenticated:
        return redirect('/dashboard')

    if request.method == 'POST':
        email = request.form['email']
        user = UserModel.query.filter_by(email=email).first()
        if user is not None and user.check_password(request.form['password']):
            login_user(user)
            return redirect('/dashboard')
    return render_template('login.html')


@app.route('/register', methods=['POST', 'GET'])
def register():
    if current_user.is_authenticated:
        return redirect('/dashboard')

    if request.method == 'POST':
        email = request.form['email']
        username = request.form['username']
        password = request.form['password']

        if UserModel.query.filter_by(email=email).first():
            return ('Failure.')

        user = UserModel(email=email, username=username)
        user.set_password(password)
        db.session.add(user)
        db.session.commit()
        return redirect('/portal')
    return render_template('register.html')


@app.route('/logout')
def logout():
    logout_user()
    return redirect('/dashboard')

if __name__ == "__main__":
  app.run(debug=True)

Here is my model.py code.

from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import LoginManager

login = LoginManager()
db = SQLAlchemy()


class UserModel(UserMixin, db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(80), unique=True)
    username = db.Column(db.String(100))
    password_hash = db.Column(db.String())

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)


@login.user_loader
def load_user(id):
    return UserModel.query.get(int(id))

Any help would be greatly appreciated!

0 Answers
Related