Skip to main content

A simple asynchronous authentication module for PostgreSQL

Project description

pg_simple_auth

A lightweight and easy-to-integrate authentication module for asynchronous Python applications using PostgreSQL and Quart. pg_simple_auth offers essential user authentication features such as signup, login, email verification, and password management, all built on secure and modern standards.

Features

  • Asynchronous Design: Fully asynchronous using asyncio and asyncpg to ensure non-blocking I/O operations.
  • Seamless Integration: Designed to work effortlessly with the Quart ASGI web framework.
  • Secure Password Management: Passwords are securely hashed using argon2, one of the most secure hashing algorithms available.
  • JWT-Based Authentication: Implements JSON Web Tokens (JWT) for stateless, secure user authentication.
  • Built-in Email Verification: Provides token-based email verification out of the box to ensure user identity.

pg_simple_auth lets you choose your framework, email sender, and app server while staying simple and easy to understand.

Installation

Install the necessary dependencies via pip:

pip install pg_simple_auth

Usage

Setting Up the Application

In your Quart application, initialize the pg_simple_auth module with the database configuration and secret key:

from quart import Quart
import asyncpg
import pg_simple_auth as auth

app = Quart(__name__)

DATABASE_URL = "postgresql://user:password@localhost/dbname"
SECRET_KEY = "your_secret_key"
TABLE_NAME = "users"

@app.before_serving
async def setup_db():
    app.db_pool = await asyncpg.create_pool(DATABASE_URL)
    await auth.initialize(app.db_pool, SECRET_KEY, TABLE_NAME)

# Add your routes and other configurations

if __name__ == '__main__':
    app.secret_key = SECRET_KEY
    app.run()

Implementing Authentication Routes

The module provides easy-to-use methods for signup, login, and user session management:

@app.route('/signup', methods=['POST'])
async def signup():
    user = ...
    password = ...
    user_info = await auth.signup(user, password)
    await auth.verify(user_info['verification_token'])
    # auto verification, you may want to send an email here
    ...

@app.route('/login', methods=['POST'])
async def login():
    user = ...
    password = ...
    await auth.login(user, password)
    user_info = await auth.login(email, password)
    if user_info:
        session['token'] = user_info['token']
    ...

@app.route('/forgot_password', methods=['POST'])
async def forgot_password():
    reset_token = await auth.forgot_password(email)
    # generate an email with the reset_token

@app.route('/change_password', methods=['GET', 'POST'])
async def change_password(token):
    ...
    if method == 'POST':
        await auth.reset_password(token, new_password)
    ...

@app.route('/signout')
async def signout():
    session.pop('token', None)
    return redirect(url_for('login'))

Example

Check the examples/1-quart.py file in this repository for a full example of how to set up and use pg_simple_auth in a Quart application.

Requirements

  • Python 3.8+
  • PostgreSQL 10+ (for proper asyncpg compatibility)
  • asyncpg library
  • Quart ASGI framework

Author

Developed by 255labs.xyz, an AI product and consulting startup committed to helping people navigate the AI era through innovative products and open-source contributions.

Changelog

  • 09/03/24 - 0.1.1, add oauth support, login_oauth(provider, oauth_id) and signup_oauth(provider, oauth_id, **insert_args)

Contributing

Contributions are highly encouraged! Please open an issue to discuss potential changes or submit a pull request.

License

This project is licensed under the MIT License. See the LICENSE file for more details.

Acknowledgements

  • asyncpg for providing a robust asynchronous PostgreSQL driver.
  • The developers of Quart for creating an excellent ASGI framework for Python.
  • The PostgreSQL community for their powerful and reliable database system.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pg_simple_auth-0.1.2.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

pg_simple_auth-0.1.2-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file pg_simple_auth-0.1.2.tar.gz.

File metadata

  • Download URL: pg_simple_auth-0.1.2.tar.gz
  • Upload date:
  • Size: 7.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for pg_simple_auth-0.1.2.tar.gz
Algorithm Hash digest
SHA256 c3c815fd90a0ab577535071a94d8386cd4cd2da6d985cd5ed15fba30f4bf7fe1
MD5 a3032b29ba3546b39d3f99e2613d36bf
BLAKE2b-256 0456b7cd217038c96cb5064507289e826364120bab91b15db3b58965939d496c

See more details on using hashes here.

File details

Details for the file pg_simple_auth-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for pg_simple_auth-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b86ad83bf2cec8b53e9d4c2d99784eef672a7a7ce6ecaf02c0970b8a67d34d2c
MD5 30d76d05aa38bad342ecdb7c57929c74
BLAKE2b-256 0669591d5ffc04437e7585ab8bf804c2b1e39e8909565fa77f431a17fb95ad63

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page