:couple: 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:

>>> 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
Issues
  • 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
  • Custom User Model related name

    Custom User Model related name

    First of all thank you for this package.

    I have a custom user model. How can i add a reverse relation to get the organization belonging to that user?

    opened by kodeine 7
  • 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
  • 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 0
  • 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 2
  • 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 3
  • version 2 stable?

    version 2 stable?

    I updated all pip packages ( https://stackoverflow.com/questions/2720014/how-to-upgrade-all-python-packages-with-pip [oops] ) which uses this package, and I've run into problems. Everything was working on v 1.1.1, and I am now getting some weird errors:

    • some dealing with having to include empty Meta classes on the Account/Organization/User models
    • some dealing with having to include empty raw_id_fields = () admin models for Account/Organization/User
    • here are some errors that the runserver prevented from running, migrating, or making migrations
    <class 'accounts.admin.AccountOwnerAdmin'>: (admin.E002) The value of 'raw_id_fields[0]' refers to 'organization_user', which is not an attribute of 'accounts.AccountOwner'.
    <class 'accounts.admin.AccountOwnerAdmin'>: (admin.E002) The value of 'raw_id_fields[1]' refers to 'organization', which is not an attribute of 'accounts.AccountOwner'.
    <class 'accounts.admin.AccountOwnerAdmin'>: (admin.E108) The value of 'list_display[0]' refers to 'organization', which is not a callable, an attribute of 'AccountOwnerAdmin', or an attribute or method on 'accounts.AccountOwner'.
    <class 'accounts.admin.AccountUserAdmin'>: (admin.E002) The value of 'raw_id_fields[0]' refers to 'user', which is not an attribute of 'accounts.AccountUser'.
    <class 'accounts.admin.AccountUserAdmin'>: (admin.E002) The value of 'raw_id_fields[1]' refers to 'organization', which is not an attribute of 'accounts.AccountUser'.
    <class 'accounts.admin.AccountUserAdmin'>: (admin.E108) The value of 'list_display[0]' refers to 'user', which is not a callable, an attribute of 'AccountUserAdmin', or an attribute or method on 'accounts.AccountUser'.
    <class 'accounts.admin.AccountUserAdmin'>: (admin.E108) The value of 'list_display[1]' refers to 'organization', which is not a callable, an attribute of 'AccountUserAdmin', or an attribute or method on 'accounts.AccountUser'.
    accounts.AccountUser: (models.E012) 'unique_together' refers to the nonexistent field 'organization'.
    accounts.AccountUser: (models.E012) 'unique_together' refers to the nonexistent field 'user'.
    accounts.AccountUser: (models.E015) 'ordering' refers to the nonexistent field, related field, or lookup 'organization'.
    accounts.AccountUser: (models.E015) 'ordering' refers to the nonexistent field, related field, or lookup 'user'.
    

    Notes

    • My code is based using the Abstract classes.
    • rolling back to 1.1.1 and everything works
    • up to date Django and Python

    From what I can tell, and based on it working in 1.1.1, my models are set up correctly (I'm happy to show you if you'd like to see them). Is 2.0.0 only partially ready for use or is there some upgrade step I might have missed?

    bug 
    opened by specialorange 11
  • Remove six

    Remove six

    This will require reworking how the base metaclasses are constructed.

    help wanted 
    opened by bennylope 0
  • Set up GitHub Actions for tests

    Set up GitHub Actions for tests

    help wanted good first issue 
    opened by bennylope 1
  • cannot import name 'AbstractOrganizationInvitation' from 'organizations.abstract'

    cannot import name 'AbstractOrganizationInvitation' from 'organizations.abstract'

    Trying to create my own organization model and I'm receiving the following error when saving/doing the migrations

    ImportError: cannot import name 'AbstractOrganizationInvitation' from 'organizations.abstract'

    from organizations.abstract import (
        AbstractOrganization,
        AbstractOrganizationInvitation,
        AbstractOrganizationOwner,
        AbstractOrganizationUser,
    )
    
    opened by erikvlm 1
  • A simple tutorial for a newbie

    A simple tutorial for a newbie

    Hello there, I think this is not the correct way of contacting you, but I could not find any other channel.

    I am looking for simple tutorial on how to actually use django-organizations in my project. I could not find any tutorials and documentation is not very helpful.

    Thank you

    opened by Shavinder 3
  • Cannot use forms or views with single-table customized organization models

    Cannot use forms or views with single-table customized organization models

    I have created custom organization, organization user, and organization owner models using the abstract organization models

    The "Getting Started" sections of the docs say this about single-table customized organization models:

    If however you want to use single-table customized organization models and/or custom organization user models, it may be best to treat Django organizations as a library and not install it in your Django project. See the Advanced customization using abstract models section.

    However, forms.py and views.py both import the Organization model from organizations.models, which causes this error:

    Django Version: | 2.2.9
    -- | --
    RuntimeError
    Model class organizations.models.Organization doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
    

    I'm currently just copying the forms.py and views.py code over to my app, but is there a better way to accomplish being able to use those utilities without having organizations installed as an app?

    opened by bareynol 1
Releases(1.1.0)
  • 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)

Accounts for Django made beautifully simple

Django Userena Userena is a Django application that supplies your Django project with full account management. It's a fully customizable application t

Bread & Pepper 1.3k Jan 15, 2022
Complete Two-Factor Authentication for Django providing the easiest integration into most Django projects.

Django Two-Factor Authentication Complete Two-Factor Authentication for Django. Built on top of the one-time password framework django-otp and Django'

Bouke Haarsma 1.1k Jan 16, 2022
Django-registration (redux) provides user registration functionality for Django websites.

Description: Django-registration provides user registration functionality for Django websites. maintainers: Macropin, DiCato, and joshblum contributor

Andrew Cutler 874 Jan 15, 2022
Customizable User Authorization & User Management: Register, Confirm, Login, Change username/password, Forgot password and more.

Flask-User v1.0 Attention: Flask-User v1.0 is a Production/Stable version. The previous version is Flask-User v0.6. User Authentication and Management

Ling Thio 965 Jan 18, 2022
Customizable User Authorization & User Management: Register, Confirm, Login, Change username/password, Forgot password and more.

Flask-User v1.0 Attention: Flask-User v1.0 is a Production/Stable version. The previous version is Flask-User v0.6. User Authentication and Management

Ling Thio 916 Feb 15, 2021
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 321 Jan 10, 2022
Django CAS 1.0/2.0/3.0 client authentication library, support Django 2.0, 2.1, 2.2, 3.0 and Python 3.5+

django-cas-ng django-cas-ng is Django CAS (Central Authentication Service) 1.0/2.0/3.0 client library to support SSO (Single Sign On) and Single Logou

django-cas-ng 323 Jan 9, 2022
Django Admin Two-Factor Authentication, allows you to login django admin with google authenticator.

Django Admin Two-Factor Authentication Django Admin Two-Factor Authentication, allows you to login django admin with google authenticator. Why Django

Iman Karimi 6 Dec 2, 2021
Simple implementation of authentication in projects using FastAPI

Fast Auth Facilita implementação de um sistema de autenticação básico e uso de uma sessão de banco de dados em projetos com tFastAPi. Instalação e con

null 3 Jan 8, 2022
Includes Automation and Personal Projects

Python Models, and Connect Forclient & OpenCv projects Completed Automation** Alarm (S

tushar malhan 1 Jan 15, 2022
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 3k Jan 10, 2022
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 2.7k Feb 17, 2021
A host-guest based app in which host can CREATE the room. and guest can join room with room code and vote for song to skip. User is authenticated using Spotify API

A host-guest based app in which host can CREATE the room. and guest can join room with room code and vote for song to skip. User is authenticated using Spotify API

Aman Raj 4 Dec 12, 2021
User Authentication in Flask using Flask-Login

User-Authentication-in-Flask Set up & Installation. 1 .Clone/Fork the git repo and create an environment Windows git clone https://github.com/Dev-Elie

ONDIEK ELIJAH OCHIENG 6 Jan 7, 2022
A secure authentication module to validate user credentials in a Streamlit application.

Streamlit-Authenticator A secure authentication module to validate user credentials in a Streamlit application. Installation Streamlit-Authenticator i

M Khorasani 33 Jan 9, 2022
examify-io is an online examination system that offers automatic grading , exam statistics , proctoring and programming tests , multiple user roles

examify-io is an online examination system that offers automatic grading , exam statistics , proctoring and programming tests , multiple user roles ( Examiner , Supervisor , Student )

Ameer Nasser 4 Oct 28, 2021
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 118 Jan 8, 2022
Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication.

Welcome to django-allauth! Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (soc

Raymond Penners 6.9k Jan 11, 2022
Per object permissions for Django

django-guardian django-guardian is an implementation of per object permissions [1] on top of Django's authorization backend Documentation Online docum

null 3.1k Jan 7, 2022