Multi-user accounts for Django projects

Overview

django-organizations

Summary Groups and multi-user account management
Author Ben Lopatin (http://benlopatin.com)
Status Documentation Status Travis-CI Build Status PyPI Package latest release PyPI Wheel Supported versions Supported implementations

Separate individual user identity from accounts and subscriptions. Django Organizations adds user-managed, multi-user groups to your Django project. Use Django Organizations whether your site needs organizations that function like social groups or multi-user account objects to provide account and subscription functionality beyond the individual user.

  • Works with your existing user model, whether django.contrib.auth or a custom model. No additional user or authentication functionality required.
  • Users can be belong to and own more than one organization (account, group)
  • Invitation and registration functionality works out of the box for many situations and can be extended as need to fit specific requirements.
  • Start with the base models or use your own for greater customization.

Documentation is on Read the Docs

Development & Contributing

The master branch represents version 2 development. For updates related to 1.x versions of django-organizations pull requests should be made against the [`version-1.x` branch](tree/version-1.x).

Development is on-going. To-do items have been moved to the wiki for the time being.

The basic functionality should not need much extending. Current dev priorities for me and contributors should include:

  • Improving the tests and test coverage (ideally moving them back out of the main module and executable using the setup.py file)
  • Improving the backends and backends concept so that additional invitation and registration backends can be used
  • Documentation
  • Ensuring all application text is translatable

Please use the project's issues tracker to report bugs, doc updates, or other requests/suggestions.

Targets & testing

The codebase is targeted and tested against:

  • Django 2.2.x against Python 3.5, 3.6, 3.7, 3.8
  • Django 3.0.x against Python 3.6, 3.7, 3.8
  • Django 3.1.x against Python 3.6, 3.7, 3.8

To run the tests against all target environments, install tox and then execute the command:

tox

Fast testing

Testing each change on all the environments takes some time, you may want to test faster and avoid slowing down development by using pytest against your current environment:

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

Supply the -x option for failfast mode:

py.test -x

Submitting

These submission guidelines will make it more likely your submissions will be reviewed and make it into the project:

  • Ensure they match the project goals and are sufficiently generalized
  • Please try to follow Django coding style. The code base style isn't all up to par, but I'd like it to move in that direction
  • Also please try to include good commit log messages.
  • Pull requests should include an amount of code and commits that are reasonable to review, are logically grouped, and based off clean feature branches.

Code contributions are expected to pass in all target environments, and pull requests should be made from branches with passing builds on Travis CI.

Project goals

django-organizations should be backend agnostic:

  1. Authentication agnostic
  2. Registration agnostic
  3. Invitation agnostic
  4. User messaging agnostic

Etc.

Installing

First add the application to your Python path. The easiest way is to use pip:

pip install django-organizations

Check the Release History tab on the PyPI package page for pre-release versions. These can be downloaded by specifying the version.

You can also install by downloading the source and running:

$ python setup.py install

By default you will need to install django-extensions or comparable libraries if you plan on adding Django Organizations as an installed app to your Django project. See below on configuring.

Configuring

Make sure you have django.contrib.auth installed, and add the organizations application to your INSTALLED_APPS list:

INSTALLED_APPS = (
    ...
    'django.contrib.auth',
    'organizations',
)

Then ensure that your project URL conf is updated. You should hook in the main application URL conf as well as your chosen invitation backend URLs:

from organizations.backends import invitation_backend

urlpatterns = [
    ...
    url(r'^accounts/', include('organizations.urls')),
    url(r'^invitations/', include(invitation_backend().get_urls())),
]

Auto slug field

The standard way of using Django Organizations is to use it as an installed app in your Django project. Django Organizations will need to use an auto slug field which are not included. By default it will try to import these from django-extensions, but you can configure your own in settings. The default:

ORGS_SLUGFIELD = 'django_extensions.db.fields.AutoSlugField'

Alternative:

ORGS_SLUGFIELD = 'autoslug.fields.AutoSlugField'

Previous versions allowed you to specify an ORGS_TIMESTAMPED_MODEL path. This is now ignored and the functionality satisifed by a vendored solution. A warning will be given but this should not have any effect on your code.

Registration & invitation backends

You can specify a different invitation backend in your project settings, and the invitation_backend function will provide the URLs defined by that backend:

INVITATION_BACKEND = 'myapp.backends.MyInvitationBackend'

Usage Overview

For most use cases it should be sufficient to include the app views directly using the default URL conf file. You can customize their functionality or access controls by extending the base views.

There are three models:

  • Organization The group object. This is what you would associate your own app's functionality with, e.g. subscriptions, repositories, projects, etc.
  • OrganizationUser A custom through model for the ManyToMany relationship between the Organization model and the User model. It stores additional information about the user specific to the organization and provides a convenient link for organization ownership.
  • OrganizationOwner The user with rights over the life and death of the organization. This is a one to one relationship with the OrganizationUser model. This allows User objects to own multiple organizations and makes it easy to enforce ownership from within the organization's membership.

The underlying organizations API is simple:

>> soundgarden = create_organization(chris, "Soundgarden", org_user_defaults={'is_admin': True}) >>> soundgarden.is_member(chris) True >>> soundgarden.is_admin(chris) True >>> soundgarden.owner.organization_user >>> soundgarden.owner.organization_user.user >>> >>> audioslave = create_organization(chris, "Audioslave") >>> tom = User.objects.get(username="tom") >>> audioslave.add_user(tom, is_admin=True) ">
>>> from organizations.utils import create_organization
>>> chris = User.objects.get(username="chris")
>>> soundgarden = create_organization(chris, "Soundgarden", org_user_defaults={'is_admin': True})
>>> soundgarden.is_member(chris)
True
>>> soundgarden.is_admin(chris)
True
>>> soundgarden.owner.organization_user
<OrganizationUser: Chris Cornell>
>>> soundgarden.owner.organization_user.user
>>> <User: chris>
>>> audioslave = create_organization(chris, "Audioslave")
>>> tom = User.objects.get(username="tom")
>>> audioslave.add_user(tom, is_admin=True)
<OrganizationUser: Tom Morello>

Custom models

Django-organizations can act as a base library (not installed in your project) and used to create unique organization model sets using custom tables. See the Cooking with Django Organizations section in the documentation for advice on proceeding.

License

Anyone is free to use or modify this software under the terms of the BSD license.

Sponsors

Muster is building precision advocacy software to impact policy through grassroots action.

Alternative text
Comments
  • Update supported Django 3.2 and 4.x testing with supported Python versions

    Update supported Django 3.2 and 4.x testing with supported Python versions

    • Adds migrations that will be needed in Django 4 (seem to not cause any issues on <4).
    • Gets rid of some Python configs from tox that aren't used.
    • Update testing and manage configs to use django_extensions.db.fields.AutoSlugField (the default for a long time) and update tests accordingly.
    • Update the README-listed tested versions.
    opened by mgrdcm 19
  • Implementing Abstract Models

    Implementing Abstract Models

    Followup of #118.

    Consider this a work in progress. I think it will take a few weeks to complete, but I managed to get something working early, so I can try to integrate it in the project I'm working on (named OpenWISP2 btw) before trying to merging it here.

    I will also write some tests for this new use case, modeling them against the existing ones.

    • [x] working rough implementation
    • [x] improve naming of leading underscore classes
    • [x] decide if the leading underscore classes should be kept private or made public
    • [x] decide if the new abstract classes should be prefixed with Abstract (would need to modify OrgMeta)
    • [x] add tests for new use case
    • [x] update documentation
    opened by nemesisdesign 15
  • [QA] Added compatibility with django 2.0

    [QA] Added compatibility with django 2.0

    So far this is only halfway - I'm running into a migration error that I'm not clear as to the cause of. (The other errors I do know how to fix, mostly).

    opened by AYZhu 13
  • Odd migration behavior in 1.0.0 release

    Odd migration behavior in 1.0.0 release

    Perhaps I am misunderstanding something, but I was confused by some odd migration behavior. Steps to reproduce:

    virtualenv -p python3 foo
    pip install Django django-extensions django-organizations
    cd $VIRTUAL_ENV; django-admin startproject foo; cd foo
    # add 'organizations' to INSTALLED_APPS
    python manage.py migrate
    python manage.py makemigrations
    

    Expected result (which is what happens in django-organizations 0.9.3):

    No changes detected
    

    Actual result with django-organizations 1.0.0:

    Migrations for 'organizations':
    /virtualenvs/foo/lib/python3.6/site-packages/organizations/migrations/0003_auto_20180111_2242.py
        - Alter field slug on organization
    

    It's not clear to me why the above migration is being auto-generated. I thought migrations were only auto-generated when model definitions differ from existing migrations, and I would have expected any needed migrations to be included with the app.

    In short, I've never seen a Django app do this before, and thus it's not clear if the above is the intended behavior.

    (Looking back, it's not clear to me why existing migrations were modified in c1c88a7 — would it not have been better to create a new migration instead? cc: @AZtheAsian @nemesisdesign)

    Again, perhaps I'm totally misunderstanding something. If indeed there's nothing amiss here, then I am merely seeking to be enlightened. 😇

    bug migrations 
    opened by justinmayer 11
  • Why does Organization have the user ManyToManyField?

    Why does Organization have the user ManyToManyField?

    It seems that the related_name on OrganizationUser (i.e., organization_users) which points back to Organization accomplishes the same thing, and in fact self.organization_users is used in some places in the code in place of self.users (see Organization.is_admin). Sorry, I have not gone through actually fully testing what I'm saying, as I am using Django-nonrel and ManyToManyField is not supported at all. But it does appear that using related_name on a ForeignKey is identical to using through on ManyToManyField from the other side of the relationship.

    Can you eliminate ManyToManyField to make it nonrel-friendly, and in general to remove redundant fields?

    Thanks!

    opened by jacobg 9
  • AttributeError raised during signup from invite

    AttributeError raised during signup from invite

    An AttributeError is raised when signing up from an invitation:

    'User' object has no attribute 'organization_set'
    

    The exception is raised when using the default invitation backend, at this line. We're using django-organizations 0.3.0, but I reproduced it in 0.4.0 too. We're using Django 1.6.5, with Python 2.7.5.

    opened by jdp 8
  • Please support abstract model inheritance

    Please support abstract model inheritance

    Your implementation currently supports only multi-table model inheritance (i.e., Organization, OrganizationUser). Please support abstract model inheritance, so that models can be customized within the same table. There will likely need to be settings for: ORGANIZATION_MODEL ORGANIZATION_USER_MODEL

    feature 
    opened by jacobg 7
  • released version is missing makemigrations changes

    released version is missing makemigrations changes

    Hi,

    As my Client class inherits from Organization, the initial migration will depen on a new created migration which is not going to be available (it was just created, locally):

    Migrations for 'organizations': 0002_auto_20151112_1643.py: - Alter field created on organization - Alter field modified on organization - Alter field created on organizationowner - Alter field modified on organizationowner - Alter field created on organizationuser - Alter field modified on organizationuser

    Would you mind fixing the missing migration and releasing again? this is critical for making it work correctly. Thanks!

    opened by manelclos 6
  • Fixing CONTRIBUTING docs

    Fixing CONTRIBUTING docs

    This PR does not just fix the docs (contributing part) but also fixes (I guess so) some tips about how to create the environment to develop new features/fix bugs. To accomplish it I changed some that were raising errors like 'python setup.py test' (nosetests does not run this way). updated setup.py and requirements.txt was replaced by requirements_dev.txt. I also took advantage to fix a type where another project was referenced instead of Django-organizations.

    opened by mauricioabreu 6
  • Set default_auto_field to 'AutoField'

    Set default_auto_field to 'AutoField'

    Django 3.2 introduces DEFAULT_AUTO_FIELD . If you set this to something other than 'django.db.models.AutoField', migrations will need to be generated for django-organization's models. This pull request sets default_auto_field just for these apps so that no migrations need to be generated.

    It also hides warnings on Django 3.2.

    The specific warning is

    RemovedInDjango41Warning: 'organizations' defines default_app_config = 'organizations.apps.OrganizationsConfig'. Django now detects this configuration automatically. You can remove default_app_config.
        app_config = AppConfig.create(entry)
    

    Similar in another highly used django library https://github.com/pennersr/django-allauth/pull/2829

    EDIT

    Change allauth to django-organization

    opened by simkimsia 5
  • Include views in a different context

    Include views in a different context

    Hi,

    First of all thank you for your hard work and this plugin. It's awesome. However, I'm missing some documentation about whether/how it's possible to include default view functionality you provide in my templates.

    Let's say I like the default behaviour of your views -> /accounts && /accounts/1/ and I'd like to include it to my page (to a specific part of a template). Is there any easy way to do so?

    NOTE: I've came back to Django after 1-2 years, so the solution might be obvious and maybe it's out of scope of this plugin's documentation, but maybe it could help if it's more explicit.

    opened by jvorcak 5
  • Add german translation

    Add german translation

    This PR adds german translations.

    Additionally, I saw that some translations have their .mo files committed. I do not know if this is intentional or not, but if this is not the case, I could also delete them in this PR and add *.mo files to the .gitignore.

    opened by ravi0lii 0
  • Organizations with multiple owners

    Organizations with multiple owners

    I'm still working my way through getting organizations implemented in my project. More a question, but I didn't see any specific way to do this - and it may be useful. I'd like to be able to have multiple "owners" or some other "admin" functionality so that the organization doesn't have to be infinitely tied to a specific user - users come and go, organizations (hopefully) persist.

    opened by brauhausdc 0
  • Page not found 404

    Page not found 404

    Hi, I tried following the Getting Started guide, but now when I try to access the path accounts/ or invitations/ I get a 404.

    When accessing the accounts/ path it also auto redirects to accounts/login which returns a 404.

    I also had to change the url snippet in the guide to use the path function instead of the url one because I was getting

    AttributeError: 'tuple' object has no attribute 'split_contents'
    

    on both urls.

    I'm using Django 4.0.1, DRF 3.13.1, DRF-simplejwt 5.0.0, django-extensions 3.1.5 and django-organizations 2.0.1.

    I also tried disabling DRF-simplejwt in case authentication was the issue but it led to the same errors.

    Thanks

    opened by obvionaoe 7
  • Error: BaseOrganizationAdmin requires 'slug' and BaseOrganizationUserAdmin requires 'is_admin' method or attribute

    Error: BaseOrganizationAdmin requires 'slug' and BaseOrganizationUserAdmin requires 'is_admin' method or attribute

    Dear all,

    Your thoughts on the following is highly appreciated. I get the following error message (client = organization):

    <class 'clients.admin.ClientAdmin'>: (admin.E027) The value of 'prepopulated_fields' refers to 'slug', which is not an attribute of 'clients.Client'.
    <class 'clients.admin.ClientUserAdmin'>: (admin.E108) The value of 'list_display[2]' refers to 'is_admin', which is not a callable, an attribute of 'ClientUserAdmin', or an attribute or method on 'clients.ClientUser'. 
    

    This, after adding the following code to admin.py:

    @admin.register(Client)
    class ClientAdmin(TenantAdminMixin, BaseOrganizationAdmin):
        list_display = ('name',)
    
    @admin.register(ClientUser)
    class ClientUserAdmin(BaseOrganizationUserAdmin):
        pass
    

    I have the following models.py:

    class Client(TenantMixin, OrganizationBase):
        created_on = models.DateField(auto_now_add=True)
        auto_create_schema = True
    
        def __str__(self):
            return self.name
    
    class ClientOwner(OrganizationOwnerBase):
        pass
    
    class ClientUser(OrganizationUserBase):
        pass
    
    class ClientUserInvitation(OrganizationInvitationBase):
        pass
    

    I'm a bit puzzled, since I've read the following on readthedocs (cookbook section):

    The base models (provided in organizations.base) instead provide only the bare minimum fields required to implement and manage organizations: if you want a slug field or timestamps on your models, you’ll need to add those in. However you can do so however you want. And if you don’t want any of those fields, you don’t have to take them.

    I can of course remove the code in admin.py, but I thought first I would call in your help ;-) Any feedback is much appreciated! Best, Erwin

    Using Django 3.2.7 and Python 3.9.x

    opened by moojen 0
  • Custom `AUTH_USER_MODEL` Creates Migration Circular Reference?

    Custom `AUTH_USER_MODEL` Creates Migration Circular Reference?

    Greetings!

    I'm having a go at using django-organizations, and I've been getting a circular reference error when attempting to perform migrations, which I believe I can trace back to django-organizations and using a custom AUTH_USER_MODEL.

    I say 'I believe' because I'm not 100% sure that I haven't done something incorrectly, but having read the documentation on using a custom user model and proxy models, I think I've covered myself...

    I've included a set of steps to reproduce below which should hopefully demonstrate that either I'm doing something woefully wrong, or there's something weird going on with custom user models.

    If you need any more information, or if I've stupidly broken it somehow, please let me know. :)

    Thanks for your help and your time! - Vector

    Steps to reproduce

    1. Create and activate a virtual environment:
      python3 -m venv .venv
      source .venv/bin/activate
      
    2. Install the following python requirements:
      appdirs==1.4.4
      asgiref==3.3.4
      distlib==0.3.1
      Django==3.2
      django-extensions==3.1.3
      django-organizations==2.0.0
      filelock==3.0.12
      pytz==2021.1
      six==1.15.0
      sqlparse==0.4.1
      virtualenv==20.4.2
      
    3. Create a new django project (I've called mine demo) and enter the directory:
      django-admin startproject demo
      cd demo
      
    4. Create an app called core which will be used for models and migrations
      python3 manage.py startapp core
      
    5. Put the following content into core/models.py:
      from django.db import models
      from django.contrib.auth.models import AbstractUser
      from organizations.models import Organization
      from organizations.models import OrganizationUser
      
      class User(AbstractUser):
          created_at = models.DateTimeField(auto_now_add=True, editable=False)
          updated_at = models.DateTimeField(auto_now_add=True)
          def __str__(self):
              return self.username
      
      class Tenant(Organization):
          class Meta:
              proxy = True
      
      class TenantUser(OrganizationUser):
          class Meta:
              proxy = True
      
    6. Update demo/settings.py to include the organizations and core apps, and set the custom user model:
      INSTALLED_APPS = [
          # ...
          'organizations',
          'core',
      ]
      
      AUTH_USER_MODEL = 'core.User'
      
    7. Create the migrations for the project:
      python3 manage.py makemigrations
      

      At this point, I get the first bit of weird output - a migration is created against the organizations module in the virtual environment:

      Migrations for 'organizations':
        .venv/lib/python3.9/site-packages/organizations/migrations/0005_auto_20210430_0635.py
          - Alter field id on organization
          - Alter field id on organizationinvitation
          - Alter field id on organizationowner
          - Alter field id on organizationuser
      Migrations for 'core':
        core/migrations/0001_initial.py
          - Create proxy model Tenant
          - Create proxy model TenantUser
          - Create model User
      
    8. Finally, attempt to create the migrations again. This time, I receive a circular reference error, which links back to the previously created migration:
      python3 manage.py makemigrations
      Traceback (most recent call last):
      [...snip...]
      django.db.migrations.exceptions.CircularDependencyError: core.0001_initial, organizations.0001_initial, organizations.0002_model_update, organizations.0003_field_fix_and_editable, organizations.0004_organizationinvitation, organizations.0005_auto_20210430_0635
      
    opened by vector-kerr 4
  • DRF Integration

    DRF Integration

    ANSWER ON THIRD COMMENT

    Hello guys,

    Thanks a lot for this outstanding work.

    I'm trying to integrate dj-organization into my DRF project and I'm having a bit of an issue. I'm struggling to filter the results the view sends back based on the user organization. I'm fairly new to Django and I'm having difficulties integrating it with DRF.

    Here is my code.

    My Organization

    from django.db import models
    from organizations.models import Organization
    
    # Create your models here.
    
    class Website(Organization):
        url = models.CharField(max_length=200)
    

    My Model which references the org

    import datetime
    from django.db import models
    from django.utils import timezone
    from org.models import Website
    
    class Extractor(models.Model):
       Org = models.ForeignKey(Website, related_name='extractor', on_delete=models.CASCADE)
       extractor_type = models.TextChoices('Extractor', 'HEADERS IMAGES LINKS')
       url = models.CharField(max_length=200)
       result = models.JSONField(blank=True, null=True)
       type_audit = models.CharField(blank=True, choices=extractor_type.choices, max_length=20)
       task_id = models.CharField(max_length=50, blank=True, null=True)
       status_job = models.CharField(max_length=30, blank=True, null=True)
       begin_date = models.DateTimeField(blank=True, null=True)
    
       def __repr__(self):
           return '<Audit {}>'.format(self.url)
    

    And my view for the Extractor Model

    Extractor view

    class ExtractorViewSet(viewsets.ModelViewSet):
        permission_classes = [permissions.IsAuthenticated]
        """
        API endpoint that allows users to be viewed or edited.
        """
        queryset = Extractor.objects.order_by('-begin_date')
        serializer_class = ExtractorSerializer
        filter_backends = [DjangoFilterBackend,filters.OrderingFilter]
        filterset_fields = ['type_audit', 'status_job']
        ordering_fields = ['id', 'type_audit', 'begin_date']
    

    My question is as follow:

    Where do I filter the Extractor object based on the user in the request.user so that he only sees the extractor for his organization ?

    I know this isn't an Issue as per say, but I'll be interested to add the answer in your documentation and an How To for others :)

    Thanks a lot. Have a great day

    opened by StanGirard 7
Releases(2.1.0)
  • 2.1.0(Oct 25, 2022)

    Adds support for Django 4.1, adds support for Python 3.11 and drops support for Python 3.6.

    Lots of thanks to @mgrdcm for the updates here!

    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(May 11, 2018)

  • 0.9.0(Feb 17, 2017)

    Biggest component added here is new abstract models. Previously the concrete Organization model and friends included helpful methods for working with group accounts that the base (abstract) models lacked. A new set of abstract models include these methods to add this functionality to classes using the base models. Thanks to @nemesisdesign for suggesting, spearheading, and implementing this - 🥇

    A few documentation and minor code updates as well courtesy of @amadornimbis, @bashu, and @RobertChristopher - 🎁

    Last but not least, while not in Travis yet, the project tox configuration now covers Python 3.6 and Django 1.11 (in progress).

    Source code(tar.gz)
    Source code(zip)
  • 0.6.1(Jan 31, 2016)

  • 0.6.0(Jan 6, 2016)

    Added support for Django 1.9 and dropped support for Django 1.4. South migrations are no longer supported.

    This release also fixes a migration issue in which an extraneous migration was required, and impacted users with configurable fields/base models.

    Source code(tar.gz)
    Source code(zip)
  • 0.5.3(Jun 3, 2015)

  • 0.5.0(Apr 12, 2015)

    Properly tested against Django 1.8, including native migrations for Django 1.7+.

    Removes explicit support for Django 1.5 and Django 1.6. Will continue to support Django 1.4 (LTS version) at least as long as the Django project team continues to support it.

    Starts testing on Python 3.5 - passing!

    Source code(tar.gz)
    Source code(zip)
  • 0.4.3(Nov 18, 2014)

  • 0.4.0(Jun 6, 2014)

    Allows for configurable TimeStampModel (base mixin for default Organization model) and AutoSlugField (field on default Organization model).

    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(May 26, 2014)

  • 0.2.0(May 18, 2014)

FastAPI-Login tries to provide similar functionality as Flask-Login does.

FastAPI-Login FastAPI-Login tries to provide similar functionality as Flask-Login does. Installation $ pip install fastapi-login Usage To begin we hav

417 Jan 07, 2023
Simple Login - Login Extension for Flask - maintainer @cuducos

Login Extension for Flask The simplest way to add login to flask! How it works First, install it from PyPI: $ pip install flask_simplelogin Then, use

Flask Extensions 181 Jan 01, 2023
API with high performance to create a simple blog and Auth using OAuth2 ⛏

DogeAPI API with high performance built with FastAPI & SQLAlchemy, help to improve connection with your Backend Side to create a simple blog and Cruds

Yasser Tahiri 111 Jan 05, 2023
🔐 Login & Register System

🔐 Login & Register System This is a developable login and register system. Enter your username and password to register or login to account. Automati

Firdevs Akbayır 10 Dec 12, 2022
Awesome Django authorization, without the database

rules rules is a tiny but powerful app providing object-level permissions to Django, without requiring a database. At its core, it is a generic framew

1.6k Dec 30, 2022
Easy and secure implementation of Azure AD for your FastAPI APIs 🔒 Single- and multi-tenant support.

Easy and secure implementation of Azure AD for your FastAPI APIs 🔒 Single- and multi-tenant support.

Intility 220 Jan 05, 2023
Local server that gives you your OAuth 2.0 tokens needed to interact with the Conta Azul's API

What's this? This is a django project meant to be run locally that gives you your OAuth 2.0 tokens needed to interact with Conta Azul's API Prerequisi

Fábio David Freitas 3 Apr 13, 2022
蓝鲸用户管理是蓝鲸智云提供的企业组织架构和用户管理解决方案,为企业统一登录提供认证源服务。

蓝鲸用户管理 简体中文 | English 蓝鲸用户管理是蓝鲸智云提供的企业组织架构和用户管理解决方案,为企业统一登录提供认证源服务。 总览 架构设计 代码目录 功能 支持多层级的组织架构管理 支持通过多种方式同步数据:OpenLDAP、Microsoft Active Directory(MAD)

腾讯蓝鲸 35 Dec 14, 2022
User-related REST API based on the awesome Django REST Framework

Django REST Registration User registration REST API, based on Django REST Framework. Documentation Full documentation for the project is available at

Andrzej Pragacz 399 Jan 03, 2023
Flask user session management.

Flask-Login Flask-Login provides user session management for Flask. It handles the common tasks of logging in, logging out, and remembering your users

Max Countryman 3.2k Dec 28, 2022
An introduction of Markov decision process (MDP) and two algorithms that solve MDPs (value iteration, policy iteration) along with their Python implementations.

Markov Decision Process A Markov decision process (MDP), by definition, is a sequential decision problem for a fully observable, stochastic environmen

Yu Shen 31 Dec 30, 2022
This project is an open-source project which I made due to sharing my experience around the Python programming language.

django-tutorial This project is an open-source project which I made due to sharing my experience around the Django framework. What is Django? Django i

MohammadMasoumi 6 May 12, 2022
A simple Boilerplate to Setup Authentication using Django-allauth 🚀

A simple Boilerplate to Setup Authentication using Django-allauth, with a custom template for login and registration using django-crispy-forms.

Yasser Tahiri 13 May 13, 2022
Skit-auth - Authorization for skit.ai's platform

skit-auth This is a simple authentication library for Skit's platform. Provides

Skit 3 Jan 08, 2022
Out-of-the-box support register, sign in, email verification and password recovery workflows for websites based on Django and MongoDB

Using djmongoauth What is it? djmongoauth provides out-of-the-box support for basic user management and additional operations including user registrat

hao 3 Oct 21, 2021
A JOSE implementation in Python

python-jose A JOSE implementation in Python Docs are available on ReadTheDocs. The JavaScript Object Signing and Encryption (JOSE) technologies - JSON

Michael Davis 1.2k Dec 28, 2022
A flask extension for managing permissions and scopes

Flask-Pundit A simple flask extension to organize resource authorization and scoping. This extension is heavily inspired by the ruby Pundit library. I

Anurag Chaudhury 49 Dec 23, 2022
Authentication testing framework

What is this This is a framework designed to test authentication for web applications. While web proxies like ZAProxy and Burpsuite allow authenticate

DigeeX 140 Jul 06, 2022
JSON Web Token Authentication support for Django REST Framework

REST framework JWT Auth JSON Web Token Authentication support for Django REST Framework Overview This package provides JSON Web Token Authentication s

Styria Digital Development 178 Jan 02, 2023
A simple username/password database authentication solution for Streamlit

TL;DR: This is a simple username/password login authentication solution using a backing database. Both SQLite and Airtable are supported.

Arvindra 49 Nov 25, 2022