Skip to content
This repository has been archived by the owner on Apr 16, 2021. It is now read-only.
/ aiohttp-login-jwt Public archive
forked from imbolc/aiohttp-login

Registration and authorization (including social) for aiohttp apps.

License

Notifications You must be signed in to change notification settings

kirlf/aiohttp-login-jwt

 
 

Repository files navigation

This fork of imbolc/aiohttp-login is developed for the based on JWT tokens registration and login procedures.

Moreover, the following options are added into the cfg.py for the contained in JWT roles:

  • "ROLES_API_BLACK_LIST": {} - for the configuration of forbiden endpoints for certain roles;
  • "ROLES_API_LIMITS": {} - for the configuration of API calls limits for certain roles;
  • "CACHE" - Redis or KeyDB object for calls counting (cache storage) (default None that means no restrictions);
  • "API_CALL_LIMIT_EXPIRATION_TIME" - time interval in minutes within which number calls should be restricted (default 60).

aiohttp-login

Registration and authorization (including social) for aiohttp apps

With just a few settings you'll give for your aiohttp site:

  • registration with email confirmation
  • authorization by email or social account (facebook, google and vkontakte for now)
  • reset password by email
  • change email with confirmation
  • edit current password

You can see all of this staff alive here

Databases

You can use this lib with different database backends:

  • postgres with asyncpg
  • mongodb with motor
  • the db you need - it's very easy to add a new backend

UI themes

The library designed to easily change UI themes. Currently bootstrap-3 and bootstrap-4 themes are available. But it's very easy to add new themes, actually theme - is just a folder with jinja2 templates.

Installation and configuration

Just install the library from pypi:

pip install aiohttp-login

Choice and configure one of database storages.

For postgres with asyncpg:

import asyncpg
from aiohttp_login.asyncpg_storage import AsyncpgStorage

pool = await asyncpg.create_pool(dsn='postgres:///your_db')
storage = AsyncpgStorage(pool)

For mongodb with motor:

from motor.motor_asyncio import AsyncIOMotorClient
from aiohttp_login.motor_storage import MotorStorage

db = AsyncIOMotorClient(io_loop=loop)['your_db']
storage = MotorStorage(db)

Now configure the library with a few settings:

app = web.Application(loop=loop)
app.middlewares.append(aiohttp_login.flash.middleware)
aiohttp_jinja2.setup(
    app,
    loader=jinja_app_loader.Loader(),
    context_processors=[aiohttp_login.flash.context_processor],
)
aiohttp_login.setup(app, storage, {
    'CSRF_SECRET': 'secret',

    'VKONTAKTE_ID': 'your-id',
    'VKONTAKTE_SECRET': 'your-secret',
    'GOOGLE_ID': 'your-id',
    'GOOGLE_SECRET': 'your-secret',
    'FACEBOOK_ID': 'your-id',
    'FACEBOOK_SECRET': 'your-secret',

    'SMTP_SENDER': 'Your Name <your@gmail.com>',
    'SMTP_HOST': 'smtp.gmail.com',
    'SMTP_PORT': 465,
    'SMTP_USERNAME': 'your@gmail.com',
    'SMTP_PASSWORD': 'password'
})

That's all. Look at the code in the example folder. Full list of available settings you can find in aiohttp_login/cfg.py file.

Run the example

Create a virtual environment and install the dependencies:

cd example
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Create postgres database and tables:

createdb aiohttp_login
psql -d aiohttp_login -f ../aiohttp_login/pg_tables.sql

Rename settings.py.template to settings.py and populate it with real data.

Run the server:

python app.py

Run tests

pip install -r requirements-dev.txt
py.test

About

Registration and authorization (including social) for aiohttp apps.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 73.7%
  • HTML 26.2%
  • Dockerfile 0.1%