Overview
========

Requirements
------------

- Python 3.5, 3.6, 3.7, 3.8 or 3.9

- Django (2.0+)

- python-openid or python3-openid (depending on your Python version)

- requests and requests-oauthlib

Supported Flows
---------------

- Signup of both local and social accounts

- Connecting more than one social account to a local account

- Disconnecting a social account -- requires setting a password if
  only the local account remains

- Optional instant-signup for social accounts -- no questions asked

- E-mail address management (multiple e-mail addresses, setting a primary)

- Password forgotten flow

- E-mail address verification flow

Supported Providers
-------------------

- 23andMe (OAuth2)

- 500px

- AgaveAPI (OAuth2)

- Amazon (OAuth2)

- Amazon Cognito (OAuth2)

- AngelList (OAuth2)

- Apple ("OAuth2")

- Asana (OAuth2)

- Auth0 (OAuth2)

- Authentiq (OAuth2)

- Azure (OAuth2)

- Baidu (OAuth2)

- Basecamp (OAuth2)

- Battle.net (OAuth2)

- Bitbucket (OAuth, OAuth2)

- Bitly (OAuth2)

- Box (OAuth2)

- CERN (OAuth2)

- CILogon (OAuth2)

- Coinbase (OAuth2)

- Dataporten (OAuth2)

- Daum (OAuth2)

- Digital Ocean (OAuth2)

- Discord (OAuth2)

- Disqus (OAuth2)

- Douban (OAuth2)

- Doximity (OAuth2)

- Draugiem

- Dropbox (OAuth, OAuth2)

- Dwolla (OAuth2)

- Edmodo (OAuth2)

- Edx (open.edx.org) (OAuth2)

- Eve Online (OAuth2)

- Eventbrite (OAuth2)

- Evernote (OAuth)

- Exist (OAuth2)

- Facebook (both OAuth2 and JS SDK)

- Feedly (OAuth2)

- Figma (OAuth2)

- Firefox Accounts (OAuth2)

- Flickr (OAuth)

- FourSquare (OAuth2)

- Frontier (OAuth2)

- Gitea (OAuth2)

- Github (OAuth2)

- GitLab (OAuth2)

- Globus (OAuth2)

- Google (OAuth2)

- Gumroad (OAuth2)

- Hubic (OAuth2)

- Instagram (OAuth2)

- JupyterHub (OAuth2)

- Kakao (OAuth2)

- Keycloak (OAuth2)

- Line (OAuth2)

- LinkedIn (OAuth, OAuth2)

- Mail.Ru (OAuth2)

- MailChimp (OAuth2)

- MediaWiki (OAuth2)

- Meetup (OAuth2)

- Microsoft (Graph) (OAuth2)

- Naver (OAuth2)

- NetIQ/Microfocus AccessManager (OAuth2)

- NextCloud (OAuth2)

- Odnoklassniki (OAuth2)

- Okta (OAuth2)

- OpenId

- OpenStreetMap (OAuth)

- ORCID (OAuth2)

- Patreon (OAuth2)

- Paypal (OAuth2)

- Persona

- Pinterest (OAuth2)

- QuickBooks (OAuth2)

- Reddit (OAuth2)

- Robinhood (OAuth2)

- Salesforce (OAuth2)

- ShareFile (OAuth2)

- Shopify (OAuth2)

- Slack (OAuth2)

- SoundCloud (OAuth2)

- Spotify (OAuth2)

- Stack Exchange (OAuth2)

- Steam (OpenID)

- Stocktwits (OAuth2)

- Strava (OAuth2)

- Stripe (OAuth2)

- Telegram

- TrainingPeaks (OAuth2)

- Trello (OAuth)

- Tumblr (OAuth)

- Twitch (OAuth2)

- Twitter (OAuth)

- Untappd (OAuth2)

- Vimeo (OAuth, OAuth2)

- VK (OAuth2)

- Weibo (OAuth2)

- Weixin (OAuth2)

- Windows Live (OAuth2)

- Xing (OAuth)

- Yahoo (OAuth2)

- Yandex (OAuth2)

- YNAB (OAuth2)

- Zoho (Oauth2)

- Zoom (OAuth2)

- Feishu (OAuth2)


Note: OAuth/OAuth2 support is built using a common code base, making it easy to add support for additional OAuth/OAuth2 providers. More will follow soon...


Features
--------

- Supports multiple authentication schemes (e.g. login by user name,
  or by e-mail), as well as multiple strategies for account
  verification (ranging from none to e-mail verification).

- All access tokens are consistently stored so that you can publish
  wall updates etc.

Architecture & Design
---------------------

- Pluggable signup form for asking additional questions during signup.

- Support for connecting multiple social accounts to a Django user account.

- The required consumer keys and secrets for interacting with
  Facebook, Twitter and the likes are to be configured in the database
  via the Django admin using the SocialApp model.

- Consumer keys, tokens make use of the Django sites framework. This
  is especially helpful for larger multi-domain projects, but also
  allows for easy switching between a development (localhost) and
  production setup without messing with your settings and database.
