Implementing Authentication in Your Web App: Practical Code Tutorial

Authentication is a fundamental aspect of web application development, ensuring that users can securely access and interact with your platform. In this tutorial, we’ll walk through the practical steps of implementing authentication in a web app using a popular framework. For this example, we’ll use Flask, a lightweight web framework for Python.

 Prerequisites

Before we begin, make sure you have the following installed:

1. Python: [Download and install Python]

2. Flask: Install Flask using the following command:

bash

    pip install Flask

 Setting Up the Flask App

Let’s create a simple Flask app with a basic structure:

python

 app.py

from flask import Flask

app = Flask(__name__)

if __name__ == '__main__':

    app.run(debug=True)

Save this as `app.py` in your project directory.

 Adding User Authentication

Now, let’s extend our app to include user authentication using Flask’s built-in `session` object. We’ll create a login page, a simple user database, and protect certain routes that require authentication.

python

 app.py (updated)

from flask import Flask, render_template, request, redirect, url_for, session

app = Flask(__name__)

app.secret_key = 'your_secret_key'   Change this to a secure secret key

 Mock user database

users = {'user1': 'password1', 'user2': 'password2'}

def is_authenticated():

    return 'username' in session

@app.route('/')

def home():

    return 'Welcome to the Home Page'

@app.route('/login', methods=['GET', 'POST'])

def login():

    if request.method == 'POST':

        username = request.form['username']

        password = request.form['password']

        if username in users and users[username] == password:

            session['username'] = username

            return redirect(url_for('dashboard'))

    return render_template('login.html')

@app.route('/dashboard')

def dashboard():

    if is_authenticated():

        return f'Hello, {session["username"]}! This is your Dashboard.'

    else:

        return redirect(url_for('login'))

@app.route('/logout')

def logout():

    session.pop('username', None)

    return redirect(url_for('home'))

if __name__ == '__main__':

    app.run(debug=True)

In this example, we have:

– A simple user database (`users` dictionary) for authentication.

– A `login` route for handling user login with a basic HTML form.

– A `dashboard` route that requires authentication using the `is_authenticated` function.

– A `logout` route for logging out and redirecting to the home page.

 Running the App

Save the code above and create a new folder named `templates` in the same directory. Inside the `templates` folder, create an HTML file named `login.html` with a simple login form.

html

<!-- templates/login.html -->

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Login</title>

</head>

<body>

    <h2>Login</h2>

    <form method="POST" action="{{ url_for('login') }}">

        <label for="username">Username:</label>

        <input type="text" id="username" name="username" required>

        <br>

        <label for="password">Password:</label>

        <input type="password" id="password" name="password" required>

        <br>

        <input type="submit" value="Login">

    </form>

</body>

</html>

Now, run your Flask app:

bash

python app.py

Visit `http://127.0.0.1:5000/` in your browser to see the home page. You can then navigate to the login page, enter the credentials from the `users` dictionary, and access the dashboard. The logout route will clear the session when you log out.

This is a basic example, and in a real-world application, you would likely use a secure authentication method, such as OAuth or JWT, and store user information securely. Additionally, consider using a database to store user credentials rather than a hard-coded dictionary.

Congratulations! You’ve successfully implemented a simple user authentication system in a Flask web app. Feel free to expand upon this foundation to build more advanced authentication features for your projects.

Share this

Related Reads

Responses (0)