Creating a Simple Login System with Flask-Login

  • Share this:

Code introduction


This code snippet demonstrates how to create a simple login system using the Flask-Login library. It includes user model, user loader, login, logout, and protected routes.


Technology Stack : This code snippet demonstrates how to create a simple login system using the Flask-Login library. It includes user model, user loader, login, logout, and protected routes.

Code Type : Flask Login Function

Code Difficulty : Intermediate


                
                    
from flask import Flask, request, redirect, url_for
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user

app = Flask(__name__)
app.secret_key = 'your_secret_key'

# Create a user loader function
@login_manager.user_loader
def load_user(user_id):
    # This should return the user object or None if user does not exist
    return User.query.get(int(user_id))

# User class inheriting from UserMixin
class User(UserMixin):
    def __init__(self, id):
        self.id = id

# Dummy database of users
users = {
    1: {'username': 'admin', 'password': 'admin'}
}

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        user = users.get(username)
        if user and user['password'] == password:
            user_instance = User(user['id'])
            login_user(user_instance)
            return redirect(url_for('dashboard'))
        else:
            return 'Invalid username or password'
    return '''
        <form method="post">
            Username: <input type="text" name="username"><br>
            Password: <input type="password" name="password"><br>
            <input type="submit" value="Login">
        </form>
    '''

@app.route('/dashboard')
@login_required
def dashboard():
    return 'Welcome to the dashboard'

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return 'You have been logged out'

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